【问题标题】:How to calculate days since 1900 generated by excel date?如何计算excel日期生成的自1900年以来的天数?
【发布时间】:2021-12-07 14:01:46
【问题描述】:

Excel 正在将日期 03/11/2021 转换为值 44535,这似乎是自 1900 年以来的几天。我试图找出一种使用我自己的 golang 库来计算它的方法。有人遇到这种问题吗?

非常感谢您的帮助

【问题讨论】:

  • 这比你想象的要复杂。例如,many countries have changed calendars after 1900。至少您必须了解 Excel 是如何处理这个问题的。
  • 请查看 Excel 帮助和 1904 日期系统,尤其是当您在 Mac 上使用旧版本的 Excel 或从这样做的人那里获取文件时。
  • 嗯,我不确定我是否看到了问题。 Excel 文档说,所有日期都存储为浮点数,即自 1900 年 1 月 1 日以来的天数。您的电子表格正在将它们格式化为整数。只需突出显示您的日期列,转到格式化数字,然后选择日期格式而不是数字格式。

标签: excel go


【解决方案1】:

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

将打印:2021 年 5 月 11 日,女巫比我们想要的多 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)

经过两天的研究,我在@chux-reinstate-monica 的评论中找到了this

如果您选择使用 MS Excel 来检查您的工作笔记 2 件事:1) 1900 年 1 月 1 日是第 1 天(不是自 1900 年 1 月 1 日以来的天数)和 2) 根据 Excel 1900 年 2 月 29 日存在(他们拒绝修复代码中的错误。)

所以我们可以从中减去 2 天得到:03/11/2021。

【讨论】:

  • 代码应该是文本,而不是截图
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-09
  • 2016-11-12
  • 2017-01-09
  • 1970-01-01
  • 2021-05-08
  • 2014-08-30
相关资源
最近更新 更多