當試圖找出自 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大神請教:

GoogleDaysPassed 搜尋

正如你所看到的,谷歌還說已經過了 43869 天,而不是 43871 天。

於是我就問我的朋友他是怎麼算的。他在 Excel 中透過將儲存格格式設定為dateonly.當他在其中寫入 an 時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= 1 And 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 日。若輸入1998 年7 月5 日,Excel 會將日期轉換為序號35981。 1900 日期系統使 Excel 和其他電子表格程式(例如 Lotus 1-2-3)之間具有更好的兼容性,這些程式設計為在 MS-DOS 或 Microsoft Windows 下運行。

1904 年日期系統

在 1904 年日期系統中,支援的第一天是 1904 年 1 月 1 日。 1 月1 日。這種設計的目的是為了防止因 1900 年不是閏年而出現的問題。過去,Excel for Macintosh 預設對源自 Macintosh 的工作簿使用 1904 日期系統。但是,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

相關內容