为什么当尝试找出自 1900 年 1 月 1 日以来已经过去了多少天时,Excel 得到的结果与 PowerShell 和 Google 不同?

为什么当尝试找出自 1900 年 1 月 1 日以来已经过去了多少天时,Excel 得到的结果与 PowerShell 和 Google 不同?

一位同事告诉我:“从 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 万能的人:

GoogleDaysPassedSearch

如你所见,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):

Excel计算Gif

答案1

原因:

首先,你朋友和 Google 的计算方式不同。Excel(使用 1900 年日期系统)仅认为自 1900 年以来多出了一天。

Excel 将日期存储为序列号,其中1-Jan-1900=110-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

相关内容