Golang中如何实现Ticks到时间的转换

Golang中如何实现Ticks到时间的转换 大家好

我遇到了一个相当奇怪的问题:有一个API服务以毫秒为单位的Unix时间戳形式提供时间,我需要将其转换为time.Time。问题在于Go语言中的time.Unix()函数接受秒或纳秒参数,而不是毫秒。那么我该如何将这个毫秒时间戳转换为纳秒或秒,并将其用作函数的参数呢?

我尝试过除以10^6,这样应该能将其转换为10^9,但在打印时出现了无效的时间转换。

任何帮助都将不胜感激。

func main() {
    fmt.Println("hello world")
}
5 回复

感谢您的回复。这与他的说法类似。

更多关于Golang中如何实现Ticks到时间的转换的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


能否请您展示一下您尝试过的部分代码以及具体的错误信息是什么?

请看这里有一个与您问题相近的示例。

嘿,兄弟,谢谢……我一直在寻找类似的东西。这应该能解决我的问题。@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对象。

回到顶部