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

将 Excel 十进制日期时间转换为 time.Time

将 Excel 十进制日期时间转换为 time.Time

Go
qq_遁去的一_1 2022-10-17 19:45:16
在 Golang 中解析 excel 文件时,会读取一个 date time 列,44531.553587963它实际上代表 time 12/01/2021 13:17:10。如何将此十进制表示形式转换为time.Timego中的对象?
查看完整描述

1 回答

?
拉丁的传说

TA贡献1789条经验 获得超8个赞

var in float64 = 44531.553587963

excelEpoch := time.Date(1899, 12, 30, 0, 0, 0, 0, time.UTC)

tm := excelEpoch.Add(time.Duration(in * float64(24 * time.Hour)))

fmt.Println(tm) // 2021-12-01 13:17:10.000003072 +0000 UTC

Excel 时间(通常,除非格式的奇怪旧版本除外)以 1899 年 12 月 30 日以来的天数为单位。本来是这样的,它1.0等于 1900 年 1 月 1 日的午夜,但有人使用了错误的闰年算法,认为 1900 年 2 月有 29 天,而实际上只有 28 天,所以在那之后的所有日期都被取消了-1。他们没有破坏现有的电子表格,而是保留了该错误,因此要获得正确的日期(1900 年后),您必须将纪元向后偏移一天,因此1.0等于 1989-12-31 和0.0等于 1989-12-30。


无论如何,一旦我们知道了纪元,它只是一种小类型的杂耍,以纳秒为单位将一天转换为浮点数,乘以,然后转换回持续时间,并将该持续时间添加到纪元。


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

添加回答

举报

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