
這個問題是基於觀察亞當五世在他的回答在如何將日期名稱輸入 Excel 的儲存格中?
當 A1 的值為 2009-08-01 時,則:
=WEEKDAY(A1)
將獲得7
=TEXT(7, "dddd")
將獲得Saturday
=TEXT(7,"dddd, yyyy-mm-dd")
將獲得Saturday, 1900-01-07
=TEXT(1,"dddd, yyyy-mm-dd")
將獲得Sunday, 1900-01-01
=TEXT("1900-01-01","dddd, yyyy-mm-dd")
還將獲得Sunday, 1900-01-01
最後兩個錯誤:1900 年 1 月 1 日其實是星期一。
各種消息來源似乎都證實了這一點:
我缺什麼?為什麼 Excel 會出現這種錯誤?
答案1
正如微軟所描述的知識庫 214058:
Excel 中 1900 年 3 月 1 日之前的星期幾不正確
更多資訊
當 Microsoft Excel 中的日期系統最初建立時,它被設計為與其他電子表格程式使用的日期系統完全相容。
然而,在這個日期系統中,1900 年被錯誤地解釋為閏年。由於 1900 年沒有 2 月 29 日(「閏日」),因此無法正確計算 1900 年 3 月 1 日(「閏日」之後的一天)之前的任何日期是星期幾。
「其他電子表格程式」指的是蓮花1-2-3,這在當時相當流行,並錯誤地認為 1900 年是閏年。這在中進行了更詳細的解釋知識庫 214326:
Excel 2000 錯誤地假定 1900 年是閏年
更多資訊
當 Lotus 1-2-3 首次發佈時,該程序假設 1900 年是閏年,儘管它實際上不是閏年。這使得程式更容易處理閏年,並且不會對 Lotus 1-2-3 中的幾乎所有日期計算造成損害。
當 Microsoft Multiplan 和 Microsoft Excel 發佈時,他們也假設 1900 年是閏年。此假設允許 Microsoft Multiplan 和 Microsoft Excel 使用與 Lotus 1-2-3 相同的序列日期系統,並提供與 Lotus 1-2-3 更高的相容性。將 1900 年視為閏年也使用戶可以更輕鬆地將工作表從一個程式移動到另一個程式。
儘管在技術上可以糾正此行為,以便當前版本的 Microsoft Excel 不假定 1900 年是閏年,但這樣做弊大於利。
如果要糾正這種行為,就會出現許多問題,包括:
- 目前 Microsoft Excel 工作表和其他文件中的幾乎所有日期都會減少一天。糾正這種轉變需要花費大量的時間和精力,特別是在使用日期的公式中。
- 某些函數(例如 WEEKDAY 函數)會傳回不同的值;這可能會導致工作表中的公式無法正常運作。
- 更正此行為將破壞 Microsoft Excel 和其他使用日期的程式之間的序列日期相容性。
如果該行為仍未得到糾正,則只會出現一個問題:
- 對於 1900 年 3 月 1 日之前的日期,WEEKDAY 函數傳回不正確的值。
答案2
這是 Joel 自己解釋的原因:我的第一次 BillG 評論
Basic 使用 1899 年 12 月 31 日而不是 1900 年 1 月 1 日作為紀元,但由於某種原因,今天的日期在 Excel 中與在 Basic 中相同。
啊?
我去找了一位年紀夠大、還記得原因的 Excel 開發人員。艾德·弗里斯似乎知道答案。
「哦,」他告訴我。 “查看 1900 年 2 月 28 日。”
「59,」我說。
“現在試試 3 月 1 日。”
“61了!”
“60怎麼了?”艾德問。
“2月29日。1900年是閏年!能被4整除!”
「猜得不錯,但沒有雪茄,」艾德說,讓我想了一會兒。
哎呀。我做了一些研究。能被 100 整除的年份不是閏年,除非它們也能被 400 整除。
1900 年不是閏年。
“這是 Excel 中的一個錯誤!”我驚呼。
「嗯,不完全是,」艾德說。 “我們必須這樣做,因為我們需要能夠導入 Lotus 123 工作表。”
“那麼,這是 Lotus 123 中的一個錯誤?”
「是的,但可能是故意的。Lotus 必須適合 640K。這不是很多內存。如果忽略 1900,只需查看最右邊的兩位是否可以判斷給定的年份是否是閏年是零。蓮花的人可能認為過去兩個月的錯誤並不重要。
答案3
解決此問題的一種方法是在一年中添加 400 年,以計算出工作日,如下式所示:
=WEEKDAY(DATE(A4+400,B4,C4),1)
所以下面的變數
A4 = 1834
B4 = 12
C4 = 14
將返回(星期日),與 2234年1
12 月 14 日相同
。1753