Excel判斷閏年:Excel x 1900/1904日期系統
寫這篇文章,花了將近一個月的時間,從前置作業的找資料、函數確認、時間差換算等,待資料備齊後,才開始敲鍵盤讓資料反芻成文字。這篇大概是我的部落格中,最嘔心瀝血之作。
在blogger發佈後,這篇的瀏覽人次,以「Excel技巧」這個類別來看,是第一名。
後來有投稿到公司的月刊中,順手在文末的地方宣傳自己的部落格,但投稿時卻被說「內容寫的太深奧,沒人看得懂」「這些內容網路上都找得到資料阿」當時聽到覺得有點小受傷。
其實會寫這篇文章的主要動機是「Excel」,正因為接觸到它才讓我想深入了解閏年的由來、如何運用函數確認閏年、日期1900/1904的區別.. 等。而這裡的每個文字都是自我學習的一部分。
閏年的由來:關於古埃及人的發現
曆法,最早是由古埃及人發明的,稱為「太陽曆」,也就是現在俗稱的「公曆」。古埃及人透過每年尼羅河的氾濫週期、天文上的觀測、以及埃及聖䴉(ㄒㄩㄢˊ)的歸來等,得知剛好每次氾濫的間隔期間,大約是365天。因此,當觀測到天狼星與太陽同時從東方升起的那一天,也正是新的一年的第一天(約公曆的7月19日前後)。
Excel的日期系統有2套,分別是1900年、1904年。一般在Windows作業系統裡,所使用的Excel都是1900年的日期系統,而這個年份表示紀元年(起始年)是從1900/1/1開始。
「 1900/1/1 = 0 」 Excel中的天數起始日,當日子隨著時間增加,天數也會跟著遞增。如下圖所示
Q:該如何判斷現在用的Excel是1900還是1904呢?有2種方式
方法1:設定儲存格格是確認
- A3儲存格格式,設定為「日期格式」,並輸入數字「1」。
- B3儲存格格式,設定為「通用格式」,並輸入數字「1」。
A3儲存格為「日期格式」,會自動帶出1900年,這表示日期系統是1900為紀元年的版本。
B3儲存格為「通用格式」,可以和A3儲存格做對照。
方法2:從Excel檔案選項中做確認
- 點選活頁簿左上角的「檔案」
- 點選左下角的「選項」
- 「進階」> 下拉至四分之三左右 >「計算此活頁簿時」>「使用1904年日期系統」
沒有打勾表示是「1900年日期系統」,反之,有打勾的是「1904年日期系統」。
微軟作業系統的Excel預設都是1900年日期系統
日期系統的歷史:Lotus 1-2-3 與 Excel 的相遇
1982年,微軟推出第一款電子製表軟體「Multiplan」並在CP/M系統上搶得先鋒,但在MS-DOS系統敗給了Lotus 1-2-3。
「Lotus 1-2-3」是在1983年,由美國蓮花軟體公司發布與IBM個人電腦相容的電子試算表Lotus 1-2-3,在當時轟動一時,是世界上第一套銷售100萬套的軟體。
第一套殺手級的應用軟體,擁有三大功能:(1)強大的試算表、(2)圖形整合、(3)簡易資料庫,故稱為1-2-3。在Excel誕生前,Lotus 1-2-3可是是最受歡迎的電子表格軟體。也因此促使了微軟在1985年推出第一款Excel。
閏年問題:1900是否為閏年?
Lotus 1-2-3應用軟體的日期系統,設定1900年為閏年。Excel在當時為了要和領頭羊Lotus 1-2-3並駕齊驅,而使用了相同的日期系統,這麼一來使用者就可以在Excel讀寫Lotus 1-2-3。相反的,Excel也相容了此bug。
到了1988年,Excel的銷量超過了Lotus,使得微軟在PC成為了軟體王國的霸主。後續,Excel約每2年會推出新版本,其中也要兼容自家的老版本,1900日期系統的bug成了難解之謎,因為一旦糾正了這個bug,會出現許多問題:
- 日期將會誤差一天,修正資料費時費工。
- 某些函數(如WEEKDAY),計算結果將返回不同的值,會導致無法正常工作。
- 修正後,會破壞使用日期的序列與相容性。
1900年並非為閏年,而1904年則是為閏年。
- Microsoft Excel for Windows 默認使用1900年日期系統
Excel將1900年系統認定為閏年,於是多出了1900年02月29日,導致無法正確計算1900年03月01日之前的日期,不過因為大部分的使用者不會使用1900年03月01日之前的日期,所以很少會產生這個問題。
- Microsoft Excel for Macintosh 默認使用1904年日期系統
早期Macintosh計算機不支持1904/01/01之前的日期。此設計是在排除1900年不是閏年的問題。
該如何判斷年份是否為閏年?
- 微軟 x 閏年判斷解說
步驟1:該年份是否能被「4」整除,「是」請移至步驟2;「否」請移至步驟5。
步驟2:該年份是否能被「100」整除,「是」請移至步驟3;「否」請移至步驟4。
步驟3:該年份是否能被「400」整除,「是」請移至步驟4:「否」請移至步驟5。
步驟4:該年份為閏年 (有366天)。
步驟5:該年份不是閏年 (有365天)。
- 判斷年份是否為閏年公式:A2儲存格:輸入想確認的年份;閏年公式解說<傳送門>
函數公式「=IF(OR(A2-ROUNDDOWN(A2/400,0)*400=0,AND(A2-ROUNDDOWN(A2/4,0)*4=0,A2-ROUNDDOWN(A2/100,0)*100<>0)),"閏年","平年")」
關於閏年
- 閏年的制定與地球公轉有關
地球繞行太陽公轉一周的時間為一年,一般認知為365天,但實際公轉所需的時間為365.24219日,也就是每年會多出0.24219天(約5小時48分46秒)。
- 歷年與回歸年的時間差
歷年:一年的長度為365天,也稱之為「平年」。
曆法上規定一個平年的時間為365天,實際上是比回歸年少算了約5小時48分46秒。
回歸年:一年的實際長度為365.24219天。
年的的制定是利用太陽運動而來,一回歸年是指太陽在天上運行,連續兩次通過春分點的間隔時間,稱為一個回歸年(tropical year),實際長度為365.24219天,這是真正一年的長度。
「百年不閏,四百年再閏」的規則。那麼,四千年呢?
- 四年一閏
當經過了一年,歷年的時間差,會少回歸年0.24219天(約5小時48分46秒),
等到了第四年,這個時間差便會累積至0.96876天(約23小時15分1秒),
回歸年會少歷天將近一天的時間。因此,制定每四年一閏來平衡。
但是,歷年比回歸年少約0.03124天(約45分)。
- 百年不閏,四百年再閏
以歷年來看,按照「每四年一閏」的規律,等到了第一百年時,
歷年+閏年將累積成36,525日(365*100+25),
比起回歸年的天數多出約0.781天(約18小時44分39秒)。
到了第四百年時,則會憑空多出3.124天的時間差。
所以,第一百年時,是不閏年的,等到第四百年時再閏。
- 四千年不閏 (按邏輯推敲)
承上述「百年不閏,四百年再閏」的規則,實際上還有0.124天(約2小時58分34秒)的時間差。
等到了第四千年時,回歸年會多歷年1.24天(約1天14分24秒),回歸年整整會多出一天來,
所以,到四千年的時後,是不閏年的。
※「四千年不閏」目前尚未有情報顯示四千年是不閏年的。
畢竟,這中間還要考量一些天文之類的專業問題,而且四千年離距今還有1981年之久。
閏年試算表:在曆法中便有此一說「四年一閏,百年不閏,四百年再閏」。
KNB碎碎唸:
此篇版本為第三版,若對我第一版的文章有興趣,可以到<傳送門>來收看。
第二版的文章,因為是投稿在公司的期刊中,所以不太方便公開第二版。我個人是偏愛第三版啦~畢竟有增添小故事及若干張圖片,文章的整體性較完整,所以自己是對第三版的滿度比較高。
- 如果資料有我理解錯誤的地方,或者有其他任何建議,都歡迎來提點指教喔;或者,各位對於閏年有甚麼其他想法,可以在下方留言一起討論喔。
課外補充:
01# 泛科學「閏年怎麼來?為什麼是2月29日?事情沒有你想的那麼簡單」
引用資料:
01# 微軟「Excel incorrectly assumes that the year 1900 is a leap year」
02# 微軟「Differences between the 1900 and the 1904 date system in Excel」
03# 微軟「在Excel中的日期系統」
04# 微軟「判斷年份是否為閏年的方法」
07# 維基百科「閏年」
10# 臺北市立天文科學教育館
11# 科普中國-科學原理一點通
函數說明:
1. 2019/08/18 Excel函數-031_mod-數學與三角函數
2. 2019/08/18 Excel函數-032_or-邏輯