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

在 Golang 中解析 excel 文件时,会读取一个 date time 列,44531.553587963它实际上代表 time 12/01/2021 13:17:10

如何将此十进制表示形式转换为time.Timego中的对象?


qq_遁去的一_1
浏览 250回答 1
1回答

拉丁的传说

var in float64 = 44531.553587963excelEpoch := 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 UTCExcel 时间(通常,除非格式的奇怪旧版本除外)以 1899 年 12 月 30 日以来的天数为单位。本来是这样的,它1.0等于 1900 年 1 月 1 日的午夜,但有人使用了错误的闰年算法,认为 1900 年 2 月有 29 天,而实际上只有 28 天,所以在那之后的所有日期都被取消了-1。他们没有破坏现有的电子表格,而是保留了该错误,因此要获得正确的日期(1900 年后),您必须将纪元向后偏移一天,因此1.0等于 1989-12-31 和0.0等于 1989-12-30。无论如何,一旦我们知道了纪元,它只是一种小类型的杂耍,以纳秒为单位将一天转换为浮点数,乘以,然后转换回持续时间,并将该持续时间添加到纪元。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go