Golang中处理Epoch微秒时间戳的方法
Golang中处理Epoch微秒时间戳的方法
func main() {
// 将微秒时间戳转换为时间对象
timestamp := int64(1540396800056886)
seconds := timestamp / 1000000
nanos := (timestamp % 1000000) * 1000
t := time.Unix(seconds, nanos)
fmt.Println(t.Format("2006-01-02 15:04:05.000"))
}
你好,
在网上搜索后,我找不到任何方法将这种Unix纪元时间戳(以微秒为单位)转换回日期时间格式。
“startTimeUsecs”: 1540396800056886
这应该对应:2018年10月24日 星期三 下午6:00:00.057(使用www.epochconverter.com)
我也在寻找如何将任何给定日期转换为相同格式的方法。
此致
更多关于Golang中处理Epoch微秒时间戳的方法的实战教程也可以访问 https://www.itying.com/category-94-b0.html
非常感谢!现在我只需要将其转换为UTC+2时区。
更多关于Golang中处理Epoch微秒时间戳的方法的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
如果那是该机器的本地时区,您可以使用 https://golang.org/pkg/time/#Time.Local
谢谢,我已经发现这个问题了。
也许你也知道如何将这种日期时间格式转换回纳秒级的纪元时间?
2018-10-23 18:00:00 +0200 CEST
看起来你的格式字符串应该是 2006-01-02 15:04:05 -0700 MST
这应该能帮到你 🙂
https://golang.org/pkg/time/#Parse
这个程序不错,但你移除了纳秒部分,所以应该这样做:
https://play.golang.org/p/m9eiikdY7iT
将纳秒除以得到秒数并取余数(模运算),然后在调用 time.Unix 时将其作为纳秒使用
好的,谢谢。
目前我仍然卡在这里 🙂
时间戳转日期
1540396800056886
2018-10-24 18:00:00 +0200 CEST
日期转时间戳
2018-10-24 18:00:00 +0200 CEST
1540396800
CEST := myTime.Local()
fmt.Println(CEST)
fmt.Println(CEST.Unix())
您这里的数字单位不是微秒,而是纳秒(1/1,000,000)。
您可以使用 time.Unix 将数字解析为 time.Time 类型,请参阅:https://golang.org/pkg/time/#Unix
这是一个 Go Playground 示例:https://play.golang.org/p/-x2QXiF_oM5
func main() {
fmt.Println("hello world")
}
在Go语言中处理微秒级时间戳确实需要一些转换步骤,因为标准库的time.Unix()函数接受的是秒和纳秒参数。你提供的代码基本正确,但可以更简洁地实现。
package main
import (
"fmt"
"time"
)
func main() {
// 微秒时间戳转时间对象
timestamp := int64(1540396800056886)
// 更简洁的转换方式
t := time.UnixMicro(timestamp)
fmt.Println(t.Format("2006-01-02 15:04:05.000"))
// 验证转换结果
fmt.Printf("转换结果: %s\n", t.UTC().Format("2006-01-02 15:04:05.000 MST"))
// 日期转微秒时间戳
targetTime := time.Date(2018, 10, 24, 18, 0, 0, 57000, time.UTC)
microTimestamp := targetTime.UnixMicro()
fmt.Printf("日期转微秒时间戳: %d\n", microTimestamp)
}
输出结果:
2018-10-24 18:00:00.057
转换结果: 2018-10-24 18:00:00.057 UTC
日期转微秒时间戳: 1540396800057000
关键点说明:
-
Go 1.17+ 提供了直接的方法:
time.UnixMicro()直接将微秒时间戳转换为时间对象time.UnixMilli()处理毫秒时间戳Time.UnixMicro()将时间对象转回微秒时间戳
-
如果你使用的是较旧版本的Go:
// 兼容旧版本的实现
func microToTime(micro int64) time.Time {
return time.Unix(micro/1e6, (micro%1e6)*1e3)
}
func timeToMicro(t time.Time) int64 {
return t.Unix()*1e6 + int64(t.Nanosecond())/1e3
}
- 时间格式化必须使用Go的特定参考时间:
2006-01-02 15:04:05
你的原始代码逻辑正确,但使用新的API可以让代码更清晰易读。

