
一位同事告訴我:「自 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大神請教:
正如你所看到的,谷歌還說已經過了 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,所以是德語):
答案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