1 回答
TA贡献1804条经验 获得超7个赞
这种转换需要处理一些巨大的数字。您的示例时间 13,224,382,394,716,547,600 太大而无法放入 int64(最大 9,223,372,036,854,775,807),但确实适合 unit64。
处理此问题时不能使用 time.Duration ,因为这是一个 int64 纳秒计数;正如文档所说,“该表示将最大可表示的持续时间限制为大约 290 年”。这就是您第一次尝试失败的原因。
但是,还有另一种方法可以在这里更好地创建时间func Unix(sec int64, nsec int64) Time。这需要 unix 格式的数据,这是自 1970 年 1 月 1 日 UTC 以来的时间(或 11644473600000000000 自windows epoch以来表示为 ns )。
使用此信息可以执行转换:
func main() {
const unixTimeBaseAsWin = 11644473600000000000 // The unix base time (January 1, 1970 UTC) as ns since Win32 epoch (1601-01-01)
const nsToSecFactor = 1000000000
timeToConvert := uint64(13224382394716547600)
unixsec := int64(timeToConvert - unixTimeBaseAsWin ) / nsToSecFactor
unixns := int64(timeToConvert % nsToSecFactor)
time := time.Unix(unixsec, unixns)
fmt.Println(time.Local())
}
注意:我已经用一些数字检查了这一点,但建议您在依赖它之前进行进一步测试。
- 1 回答
- 0 关注
- 99 浏览
添加回答
举报