英文:
How to calculate days since 1900 generated by excel date?
问题
Excel正在将日期03/11/2021转换为值44535,这似乎是自1900年以来的天数。我正在尝试找出一种使用自己的Golang库进行计算的方法。有人遇到过这样的问题吗?
非常感谢您的帮助。
英文:
Excel is converting the date 03/11/2021 to value 44535, which seems to be days since 1900. I´m trying to figure out a way to calculate this using my own golang libs. Does anyone have this kind of problem?
Thank you a lot for your help
答案1
得分: 2
这个问题的一个不太正式的解决方法是使用addDays函数。
d := time.Date(1900, 1, 1, 0, 0, 0, 0, time.UTC)
fmt.Println(d) // 1900-01-01 00:00:00 +0000 UTC
d2 := d.AddDate(0, 0, 44503)
fmt.Println(d2) // 2021-11-05 00:00:00 +0000 UTC
输出结果为:05/11/2021,比我们期望的多了2天。
下面是使用JavaScript实现相同功能的代码:
date = new Date(1900, 0, 1)
// Mon Jan 01 1900 00:00:00 GMT-0338 (Amazon Standard Time)
date.setDate(date.getDate() + 44503)
// Fri Nov 05 2021 00:00:00 GMT-0400 (Amazon Standard Time)
经过一些关于这2天的研究,我在@chux-reinstate-monica的评论中找到了这个链接:
> 如果你选择使用MS Excel来检查你的工作,请注意两件事:1)1900年1月1日是第1天(而不是自1900年1月1日以来的天数),2)根据Excel的说法,1900年2月29日是存在的(这是他们拒绝修复的一个错误)。
因此,我们可以从中减去2天,得到:03/11/2021。
英文:
A not so fency workaround for this problem would be addDays
d := time.Date(1900, 1, 1, 0, 0, 0, 0, time.UTC)
fmt.Println(d) // 1900-01-01 00:00:00 +0000 UTC
d2 := d.AddDate(0, 0, 44503)
fmt.Println(d2) // 2021-11-05 00:00:00 +0000 UTC
Would print: 05/11/2021 witch is 2 days more than what we desire.
Here we can see the same using JavaScript:
date = new Date(1900, 0, 1)
// Mon Jan 01 1900 00:00:00 GMT-0338 (Amazon Standard Time)
date.setDate(date.getDate() + 44503)
// Fri Nov 05 2021 00:00:00 GMT-0400 (Amazon Standard Time)
After some research about this 2 days I found this in a comment by @chux-reinstate-monica:
> If you choose to use MS Excel to check your work note 2 things: 1) Jan 1, 1900 is day 1 (not the number of days since Jan 1, 1900) and 2) according to Excel Feb 29, 1900 exists(a bug in their code they refuse to fix.)
So we can substract 2 days from that to have: 03/11/2021.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论