登录
首页 >  Golang >  Go问答

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

来源:stackoverflow

时间:2024-04-05 20:12:38 137浏览 收藏

大家好,我们又见面了啊~本文《如何将非常大的 (>max(int64)) 纳秒 unix 时间戳转换为 time.Time》的内容中将会涉及到等等。如果你正在学习Golang相关知识,欢迎关注我,以后会给大家带来更多Golang相关文章,希望我们能一起进步!下面就开始本文的正式内容~

问题内容

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


正确答案


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

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 上尝试一下。

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《如何将非常大的 (>max(int64)) 纳秒 unix 时间戳转换为 time.Time》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>