登录
首页 >  Golang >  Go问答

将Excel日期时间转换为Go中的time.Time

来源:stackoverflow

时间:2024-03-12 20:33:21 122浏览 收藏

今日不肯埋头,明日何以抬头!每日一句努力自己的话哈哈~哈喽,今天我将给大家带来一篇《将Excel日期时间转换为Go中的time.Time》,主要内容是讲解等等,感兴趣的朋友可以收藏或者有更好的建议在评论提出,我都会认真看的!大家一起进步,一起学习!

问题内容

在 Golang 中解析 Excel 文件时,日期时间列被读取为 44531.553587963,它实际上代表时间 12/01/2021 13:17:10

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


正确答案


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。

无论如何,一旦我们知道了纪元,就只需进行一些类型处理即可将一天(以纳秒为单位)转换为浮点数,相乘,然后转换回持续时间,并将该持续时间添加到纪元中。

到这里,我们也就讲完了《将Excel日期时间转换为Go中的time.Time》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>