在 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。
无论如何,一旦我们知道了纪元,它只是一种小类型的杂耍,以纳秒为单位将一天转换为浮点数,乘以,然后转换回持续时间,并将该持续时间添加到纪元。
- 1 回答
- 0 关注
- 137 浏览
添加回答
举报
0/150
提交
取消