![为什么当尝试找出自 1900 年 1 月 1 日以来已经过去了多少天时,Excel 得到的结果与 PowerShell 和 Google 不同?](https://linux22.com/image/1615818/%E4%B8%BA%E4%BB%80%E4%B9%88%E5%BD%93%E5%B0%9D%E8%AF%95%E6%89%BE%E5%87%BA%E8%87%AA%201900%20%E5%B9%B4%201%20%E6%9C%88%201%20%E6%97%A5%E4%BB%A5%E6%9D%A5%E5%B7%B2%E7%BB%8F%E8%BF%87%E5%8E%BB%E4%BA%86%E5%A4%9A%E5%B0%91%E5%A4%A9%E6%97%B6%EF%BC%8CExcel%20%E5%BE%97%E5%88%B0%E7%9A%84%E7%BB%93%E6%9E%9C%E4%B8%8E%20PowerShell%20%E5%92%8C%20Google%20%E4%B8%8D%E5%90%8C%EF%BC%9F.png)
一位同事告诉我:“从 1900 年 1 月 1 日到现在,正好过去了 43871 天”。今天是 2020 年 2 月 10 日。
我想用 PowerShell 检查一下,但得到了另一个结果:
PS C:\Windows\system32> New-TimeSpan ([datetime]"01.01.1900") (Get-Date)
Days : 43869
Hours : 11
Minutes : 15
Seconds : 46
Milliseconds : 304
所以我感到很困惑,因为有两天的差异。所以我问了 Google 万能的人:
如你所见,Google 还说已经过去了 43869 天,而不是 43871 天。
于是我问我的朋友他是如何计算的。他在 Excel 中通过将单元格格式化为 来完成此操作dateonly
。然后当他在其中写入 时int
,Excel 会将其转换为日期,例如
15641
变成27.10.1942
19874
变成30.05.1954
43869
变成08.02.2020
(?)43871
变成10.02.2020
(?)
Excel 是否比我们提前了 2 天,或者为什么它认为自 1900 年 1 月 1 日起比实际多了 2 天?它是否遗漏了什么?
下面是它的一个小 gif(遗憾的是它是德文的,因为我有一个德文版 Excel):
答案1
原因:
首先,你朋友和 Google 的计算方式不同。Excel(使用 1900 年日期系统)仅认为自 1900 年以来多出了一天。
Excel 将日期存储为序列号,其中1-Jan-1900
=1
和10-Feb-2020
-->43871
所以天以来通过 Excel 应该是43871
- 1
-->43870
但是Excel计算不正确。
当 Excel 推出时,Lotus123 是领先的电子表格程序。
Lotus 123 有一个错误,它认为 1900 年是闰年。
为了与竞争对手兼容,Excel 包含了该错误。但是,由于29-Feb-1900
是不存在的日期,因此43869
在减去这两个日期时,其他方法将正确显示。
顺便说一句,Excel VBA 也能正确计算日期差异 -->43869
答案2
Microsoft Excel 支持两种不同的日期系统。这些系统是 1900 日期系统和 1904 日期系统
1900 日期系统
在 1900 日期系统中,支持的第一天是 1900 年 1 月 1 日。输入日期时,该日期将转换为表示已过天数的序列号,从 1 开始表示 1900 年 1 月 1 日。例如,如果输入 1998 年 7 月 5 日,Excel 会将该日期转换为序列号 35981。默认情况下,Microsoft Excel for Windows 使用 1900 日期系统。1900 日期系统使 Excel 与其他电子表格程序(如 Lotus 1-2-3,这些程序设计为在 MS-DOS 或 Microsoft Windows 下运行)之间具有更好的兼容性。
1904 日期系统
在 1904 日期系统中,支持的第一天是 1904 年 1 月 1 日。输入日期时,该日期将转换为表示自 1904 年 1 月 1 日以来经过的天数的序列号,从 0 开始表示 1904 年 1 月 1 日。例如,如果输入 1998 年 7 月 5 日,Excel 会将该日期转换为序列号 34519。由于早期 Macintosh 计算机的设计,不支持 1904 年 1 月 1 日之前的日期。此设计旨在防止与 1900 年不是闰年这一事实相关的问题。过去,Excel for Macintosh 默认使用 1904 日期系统来处理源自 Macintosh 的工作簿。但是,Excel for Macintosh 现在默认使用 1900 日期系统,并支持最早为 1900 年 1 月 1 日的日期。
日期系统之间的差异
由于两个日期系统使用不同的起始日期,因此同一个日期在每个日期系统中用不同的序列号表示。例如,1998 年 7 月 5 日可以有两个不同的序列号,如下所示。
Date system Serial number of July 5, 1998
1900 date system 35981
1904 date system 34519
来源: https://docs.microsoft.com/en-us/office/troubleshoot/excel/1900-and-1904-date-system