一位同事告诉我:“自 1900 年 1 月 1 日以来,正好 43871 天过去了”。今天是 10.02.2020。
我想用 PowerShell 进行检查,但我得到了另一个结果:
PS C:\Windows\system32> New-TimeSpan ([datetime]"01.01.1900") (Get-Date)
Days : 43869
Hours : 11
Minutes : 15
Seconds : 46
Milliseconds : 304
所以我很困惑,因为有 2 天的差异。所以我问全能的谷歌:
如您所见,谷歌还说已经过去了 43869 天,而不是 43871。
所以我问我朋友他是怎么计算的。他在 Excel 中通过将单元格格式化为dateonly
. 然后当他在其中写入int
时,Excel 会将其转换为日期,例如
15641
变成27.10.1942
19874
变成30.05.1954
43869
变成08.02.2020
(?)43871
变成10.02.2020
(?)
Excel 是否比我们早 2 天,或者为什么它认为自 01.01.1900 以来比实际多 2 天?它缺少什么吗?
这是它的一个小 gif(不幸的是,因为我有一个德语 Excel,所以是德语):
为什么:
首先,您的朋友和 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
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 开始表示 1 月1, 1904。例如,如果输入 1998 年 7 月 5 日,Excel 会将日期转换为序列号 34519。由于早期 Macintosh 计算机的设计,不支持 1904 年 1 月 1 日之前的日期。这种设计旨在防止与 1900 年不是闰年有关的问题。过去,Macintosh 的 Excel 默认使用 1904 日期系统来处理源自 Macintosh 的工作簿。但是,Excel for Macintosh 现在默认使用 1900 日期系统,并支持早在 1900 年 1 月 1 日的日期。
日期系统之间的区别
由于两种日期系统使用不同的起始日期,相同的日期在每个日期系统中由不同的序列号表示。例如,1998 年 7 月 5 日可以有两个不同的序列号,如下所示。
来源: https ://docs.microsoft.com/en-us/office/troubleshoot/excel/1900-and-1904-date-system