为了账号安全,请及时绑定邮箱和手机立即绑定

如何将非常大的(>max(int64))纳秒unix时间戳转换为时间

如何将非常大的(>max(int64))纳秒unix时间戳转换为时间

Go
慕丝7291255 2022-09-05 17:38:36
我有一个uint64纳秒的unix时间戳,它大于int64可以容纳的最大值。因为我不能再利用时间了。Unix()函数采用int64,我如何将此时间戳转换为时间而不会丢失数据?
查看完整描述

1 回答

?
烙印99

TA贡献1829条经验 获得超13个赞

时间。Unix() 函数接受 2 个参数:


func Unix(sec int64, nsec int64) Time

如果有纳秒,则可以传递 的 纳秒值。例如:int640secnsec


nsec := int64(1623840300988135567)

t := time.Unix(0, nsec)

fmt.Println(t) // 2021-06-16 10:45:00.988135567 +0000 UTC

传递超出范围 [0, 999999999] 的纳秒值是有效的。


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


例如:


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.Hourmath.MaxInt64int64


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

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

在Go Playground上尝试一下。


查看完整回答
反对 回复 2022-09-05
  • 1 回答
  • 0 关注
  • 157 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信