gpt4 book ai didi

go - 如何将非常大的 (>max(int64)) 纳秒级 unix 时间戳转换为 time.Time

转载 作者:行者123 更新时间:2023-12-04 00:49:03 29 4
gpt4 key购买 nike

我有一个 uint64 纳秒 unix 时间戳,它大于 int64 可以容纳的最大值。由于我不能再使用采用 int64 的 time.Unix() 函数,我如何才能在不丢失数据的情况下将此时间戳转换为时间?

最佳答案

time.Unix()函数有两个参数:

func Unix(sec int64, nsec int64) Time

如果您有 int64 纳秒,您可以为 sec 传递 0,为 nsec 传递纳秒值>。例如:

nsec := int64(1623840300988135567)
t := time.Unix(0, nsec)
fmt.Println(t) // 2021-06-16 10:45:00.988135567 +0000 UTC

在 [0, 999999999] 范围之外传递纳秒值是有效的。

如果您有一个不适合 int64 的纳秒值,那么只需将它分成两部分:秒和剩余的纳秒。打破它只是简单地除以并得到除以 1e9(这是一秒中的纳秒数)的余数。

例如:

x := uint64(math.MaxInt64)
t = time.Unix(0, int64(x))
fmt.Println(t)

x += uint64(time.Hour)
t = time.Unix(int64(x/1e9), int64(x%1e9))
fmt.Println(t)

time.Hour 添加到 math.MaxInt64 显然不适合 int64。然而上面的代码运行良好并输出:

2262-04-11 23:47:16.854775807 +0000 UTC
2262-04-12 00:47:16.854775807 +0000 UTC

Go Playground 上试试.

关于go - 如何将非常大的 (>max(int64)) 纳秒级 unix 时间戳转换为 time.Time,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68000931/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com