Golang中如何实现Ticks到时间的转换
Golang中如何实现Ticks到时间的转换 大家好
我遇到了一个相当奇怪的问题:有一个API服务以毫秒为单位的Unix时间戳形式提供时间,我需要将其转换为time.Time。问题在于Go语言中的time.Unix()函数接受秒或纳秒参数,而不是毫秒。那么我该如何将这个毫秒时间戳转换为纳秒或秒,并将其用作函数的参数呢?
我尝试过除以10^6,这样应该能将其转换为10^9,但在打印时出现了无效的时间转换。
任何帮助都将不胜感激。
func main() {
fmt.Println("hello world")
}
5 回复
能否请您展示一下您尝试过的部分代码以及具体的错误信息是什么?
请看这里有一个与您问题相近的示例。
嘿,兄弟,谢谢……我一直在寻找类似的东西。这应该能解决我的问题。@geosoft1
在Go语言中,将毫秒级Unix时间戳转换为time.Time的正确方法是使用time.Unix()函数,但需要将毫秒转换为秒和纳秒的组合。time.Unix()函数的第一个参数是秒数,第二个参数是纳秒部分。
以下是完整的解决方案:
package main
import (
"fmt"
"time"
)
func main() {
// 假设这是从API获取的毫秒时间戳
milliseconds := int64(1717027200000) // 2024-05-30 00:00:00 UTC
// 将毫秒转换为time.Time
// 秒部分 = 毫秒 / 1000
// 纳秒部分 = (毫秒 % 1000) * 1e6
t := time.Unix(milliseconds/1000, (milliseconds%1000)*int64(time.Millisecond))
fmt.Printf("原始毫秒时间戳: %d\n", milliseconds)
fmt.Printf("转换后的时间: %s\n", t.Format("2006-01-02 15:04:05"))
fmt.Printf("UTC时间: %s\n", t.UTC().Format("2006-01-02 15:04:05"))
// 验证转换正确性
fmt.Printf("转换回毫秒: %d\n", t.UnixMilli())
}
输出结果:
原始毫秒时间戳: 1717027200000
转换后的时间: 2024-05-30 00:00:00
UTC时间: 2024-05-30 00:00:00
转换回毫秒: 1717027200000
更简洁的写法是使用Go 1.17+引入的time.UnixMilli()函数:
package main
import (
"fmt"
"time"
)
func main() {
milliseconds := int64(1717027200000)
// 直接使用UnixMilli函数(Go 1.17+)
t := time.UnixMilli(milliseconds)
fmt.Printf("毫秒时间戳: %d\n", milliseconds)
fmt.Printf("转换结果: %s\n", t.Format("2006-01-02 15:04:05"))
}
如果你的Go版本低于1.17,可以使用第一种方法。两种方法都能正确地将毫秒时间戳转换为time.Time对象。

