为什么golang time包中的Unix函数要返回int64?

新手上路,请多包涵

这样很多情况下我要将int64转换为int.
但是例如Day()函数之类的返回是int.
UnixNano()返回的是int64我能理解,因为超过2^32次方。
仅仅是因为以后unix时间戳也有可能会超过2^16次方吗?
那我现在直接做一个int(int64)的强制转换可能会产生什么问题吗?

阅读 10.3k
3 个回答

我想你提到的是这个API https://golang.org/pkg/time/#...

func (t Time) Unix() int64

32 bit 整数会有year 2038问题。由于历史原因很多time_t和相关实现使用32 bit整数:

Implementations in which time_t is a 32-bit signed integer (many historical implementations) fail in the year 2038. IEEE Std 1003.1-2001 does not address this problem. However, the use of the time_t type is mandated in order to ease the eventual fix.

Source: https://www.systutorials.com/...

但Go相对比较新,不需要背着向后兼容的包袱。64 bit整数避开这些问题。

这个不是返回 Time 吗?

func Unix(sec int64, nsec int64) Time

uint32的时间戳精度只有秒,而且32位最大值(4294967296)只能用到2102年就不够用了。golang 用int64可以精确到纳秒。一般在golang中还是直接用time.Time类型的,只有保存时才做转换。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏