在 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 關注
- 228 瀏覽
添加回答
舉報
0/150
提交
取消
