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

8 回复

非常感谢!现在我只需要将其转换为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

关键点说明:

  1. Go 1.17+ 提供了直接的方法

    • time.UnixMicro() 直接将微秒时间戳转换为时间对象
    • time.UnixMilli() 处理毫秒时间戳
    • Time.UnixMicro() 将时间对象转回微秒时间戳
  2. 如果你使用的是较旧版本的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
}
  1. 时间格式化必须使用Go的特定参考时间:2006-01-02 15:04:05

你的原始代码逻辑正确,但使用新的API可以让代码更清晰易读。

回到顶部