是星期一 農曆十二月初一(農曆和公曆19年重複一次 所以查詢19年的倍數 也就是1995年的1月1日就可以瞭解公元1年的農曆日期:PS不一定準確) 最常見的公式: W = [Y-1] + [(Y-1)/4] - [(Y-1)/100] + [(Y-1)/400] + D Y是年份數,D是這一天在這一年中的累積天數,也就是這一天在這一年中是第幾天。 最好用的是蔡勒公式: W = [C/4] - 2C + y + [y/4] + [13 * (M+1) / 5] + d - 1 C是世紀數減一,y是年份後兩位,M是月份,d是日數。1月和2月要按上一年的13月和 14月來算,這時C和y均按上一年取值。 兩個公式中的[...]均指只取計算結果的整數部分。算出來的W除以7,餘數是幾就 是星期幾。如果餘數是0,則為星期日。 --------------------------------------------------------------------------- 星期制度是一種有古老傳統的制度。據說因為《聖經·創世紀》中規定上帝用了六 天時間創世紀,第七天休息,所以人們也就以七天為一個週期來安排自己的工作和生 活,而星期日是休息日。從實際的角度來講,以七天為一個週期,長短也比較合適。所 以儘管中國的傳統工作週期是十天(比如王勃《滕王閣序》中說的“十旬休暇”,即是 指官員的工作每十日為一個週期,第十日休假),但後來也採取了西方的星期制度。 在日常生活中,我們常常遇到要知道某一天是星期幾的問題。有時候,我們還想知 道歷史上某一天是星期幾。通常,解決這個方法的有效辦法是看日曆,但是我們總不會 隨時隨身帶著日曆,更不可能隨時隨身帶著幾千年的萬年曆。假如是想在計算機程式設計中 計算某一天是星期幾,預先把一本萬年曆存進去就更不現實了。這時候是不是有辦法通 過什麼公式,從年月日推出這一天是星期幾呢? 答案是肯定的。其實我們也常常在這樣做。我們先舉一個簡單的例子。比如,知道 了2004年5月1日是星期六,那麼2004年5月31日“世界無煙日”是星期幾就不難推算出 來。我們可以掰著指頭從1日數到31日,同時數星期,最後可以數出5月31日是星期一。 其實運用數學計算,可以不用掰指頭。我們知道星期是七天一輪迴的,所以5月1日是星 期六,七天之後的5月8日也是星期六。在日期上,8-1=7,正是7的倍數。同樣,5月15 日、5月22日和5月29日也是星期六,它們的日期和5月1日的差值分別是14、21和28,也 都是7的倍數。那麼5月31日呢?31-1=30,雖然不是7的倍數,但是31除以7,餘數為2, 這就是說,5月31日的星期,是在5月1日的星期之後兩天。星期六之後兩天正是星期一。 這個簡單的計算告訴我們計算星期的一個基本思路:首先,先要知道在想算的日子 之前的一個確定的日子是星期幾,拿這一天做為推算的標準,也就是相當於一個計算的 “原點”。其次,知道想算的日子和這個確定的日子之間相差多少天,用7除這個日期 的差值,餘數就表示想算的日子的星期在確定的日子的星期之後多少天。如果餘數是 0,就表示這兩天的星期相同。顯然,如果把這個作為“原點”的日子選為星期日,那 麼餘數正好就等於星期幾,這樣計算就更方便了。 但是直接計算兩天之間的天數,還是不免繁瑣。比如1982年7月29日和2004年5月 1日之間相隔7947天,就不是一下子能算出來的。它包括三段時間:一,1982年7月29 日以後這一年的剩餘天數;二,1983-2003這二十一個整年的全部天數;三,從2004年 元旦到5月1日經過的天數。第二段比較好算,它等於21*365+5=7670天,之所以要加 5,是因為這段時間內有5個閏年。第一段和第三段就比較麻煩了,比如第三段,需要把 5月之前的四個月的天數累加起來,再加上日期值,即31+29+31+30+1=122天。同理,第 一段需要把7月之後的五個月的天數累加起來,再加上7月剩下的天數,一共是155天。 所以總共的相隔天數是122+7670+155=7947天。 仔細想想,如果把“原點”日子的日期選為12月31日,那麼第一段時間也就是一個 整年,這樣一來,第一段時間和第二段時間就可以合併計算,整年的總數正好相當於兩 個日子的年份差值減一。如果進一步把“原點”日子選為公元前1年12月31日(或者天文 學家所使用的公元0年12月31日),這個整年的總數就正好是想算的日子的年份減一。這 樣簡化之後,就只須計算兩段時間:一,這麼多整年的總天數;二,想算的日子是這一 年的第幾天。巧的是,按照公曆的年月設定,這樣反推回去,公元前1年12月31日正好是 星期日,也就是說,這樣算出來的總天數除以7的餘數正好是星期幾。那麼現在的問題就 只有一個:這麼多整年裡面有多少閏年。這就需要了解公曆的置閏規則了。 我們知道,公曆的平年是365天,閏年是366天。置閏的方法是能被4整除的年份在 2月加一天,但能被100整除的不閏,能被400整除的又閏。因此,像1600、2000、2400 年都是閏年,而1700、1800、1900、2100年都是平年。公元前1年,按公曆也是閏年。 因此,對於從公元前1年(或公元0年)12月31日到某一日子的年份Y之間的所有整年 中的閏年數,就等於 [(Y-1)/4] - [(Y-1)/100] + [(Y-1)/400], [...]表示只取整數部分。第一項表示需要加上被4整除的年份數,第二項表示需要去掉 被100整除的年份數,第三項表示需要再加上被400整除的年份數。之所以Y要減一,這 樣,我們就得到了第一個計算某一天是星期幾的公式: W = (Y-1)*365 + [(Y-1)/4] - [(Y-1)/100] + [(Y-1)/400] + D. (1) 其中D是這個日子在這一年中的累積天數。算出來的W就是公元前1年(或公元0年)12月 31日到這一天之間的間隔日數。把W用7除,餘數是幾,這一天就是星期幾。比如我們來 算2004年5月1日: W = (2004-1)*365 + [(2004-1)/4] - [(2004-1)/100] + [(2004-1)/400] + (31+29+31+30+1) = 731702, 731702 / 7 = 104528……6,餘數為六,說明這一天是星期六。這和事實是符合的。
是星期一 農曆十二月初一(農曆和公曆19年重複一次 所以查詢19年的倍數 也就是1995年的1月1日就可以瞭解公元1年的農曆日期:PS不一定準確) 最常見的公式: W = [Y-1] + [(Y-1)/4] - [(Y-1)/100] + [(Y-1)/400] + D Y是年份數,D是這一天在這一年中的累積天數,也就是這一天在這一年中是第幾天。 最好用的是蔡勒公式: W = [C/4] - 2C + y + [y/4] + [13 * (M+1) / 5] + d - 1 C是世紀數減一,y是年份後兩位,M是月份,d是日數。1月和2月要按上一年的13月和 14月來算,這時C和y均按上一年取值。 兩個公式中的[...]均指只取計算結果的整數部分。算出來的W除以7,餘數是幾就 是星期幾。如果餘數是0,則為星期日。 --------------------------------------------------------------------------- 星期制度是一種有古老傳統的制度。據說因為《聖經·創世紀》中規定上帝用了六 天時間創世紀,第七天休息,所以人們也就以七天為一個週期來安排自己的工作和生 活,而星期日是休息日。從實際的角度來講,以七天為一個週期,長短也比較合適。所 以儘管中國的傳統工作週期是十天(比如王勃《滕王閣序》中說的“十旬休暇”,即是 指官員的工作每十日為一個週期,第十日休假),但後來也採取了西方的星期制度。 在日常生活中,我們常常遇到要知道某一天是星期幾的問題。有時候,我們還想知 道歷史上某一天是星期幾。通常,解決這個方法的有效辦法是看日曆,但是我們總不會 隨時隨身帶著日曆,更不可能隨時隨身帶著幾千年的萬年曆。假如是想在計算機程式設計中 計算某一天是星期幾,預先把一本萬年曆存進去就更不現實了。這時候是不是有辦法通 過什麼公式,從年月日推出這一天是星期幾呢? 答案是肯定的。其實我們也常常在這樣做。我們先舉一個簡單的例子。比如,知道 了2004年5月1日是星期六,那麼2004年5月31日“世界無煙日”是星期幾就不難推算出 來。我們可以掰著指頭從1日數到31日,同時數星期,最後可以數出5月31日是星期一。 其實運用數學計算,可以不用掰指頭。我們知道星期是七天一輪迴的,所以5月1日是星 期六,七天之後的5月8日也是星期六。在日期上,8-1=7,正是7的倍數。同樣,5月15 日、5月22日和5月29日也是星期六,它們的日期和5月1日的差值分別是14、21和28,也 都是7的倍數。那麼5月31日呢?31-1=30,雖然不是7的倍數,但是31除以7,餘數為2, 這就是說,5月31日的星期,是在5月1日的星期之後兩天。星期六之後兩天正是星期一。 這個簡單的計算告訴我們計算星期的一個基本思路:首先,先要知道在想算的日子 之前的一個確定的日子是星期幾,拿這一天做為推算的標準,也就是相當於一個計算的 “原點”。其次,知道想算的日子和這個確定的日子之間相差多少天,用7除這個日期 的差值,餘數就表示想算的日子的星期在確定的日子的星期之後多少天。如果餘數是 0,就表示這兩天的星期相同。顯然,如果把這個作為“原點”的日子選為星期日,那 麼餘數正好就等於星期幾,這樣計算就更方便了。 但是直接計算兩天之間的天數,還是不免繁瑣。比如1982年7月29日和2004年5月 1日之間相隔7947天,就不是一下子能算出來的。它包括三段時間:一,1982年7月29 日以後這一年的剩餘天數;二,1983-2003這二十一個整年的全部天數;三,從2004年 元旦到5月1日經過的天數。第二段比較好算,它等於21*365+5=7670天,之所以要加 5,是因為這段時間內有5個閏年。第一段和第三段就比較麻煩了,比如第三段,需要把 5月之前的四個月的天數累加起來,再加上日期值,即31+29+31+30+1=122天。同理,第 一段需要把7月之後的五個月的天數累加起來,再加上7月剩下的天數,一共是155天。 所以總共的相隔天數是122+7670+155=7947天。 仔細想想,如果把“原點”日子的日期選為12月31日,那麼第一段時間也就是一個 整年,這樣一來,第一段時間和第二段時間就可以合併計算,整年的總數正好相當於兩 個日子的年份差值減一。如果進一步把“原點”日子選為公元前1年12月31日(或者天文 學家所使用的公元0年12月31日),這個整年的總數就正好是想算的日子的年份減一。這 樣簡化之後,就只須計算兩段時間:一,這麼多整年的總天數;二,想算的日子是這一 年的第幾天。巧的是,按照公曆的年月設定,這樣反推回去,公元前1年12月31日正好是 星期日,也就是說,這樣算出來的總天數除以7的餘數正好是星期幾。那麼現在的問題就 只有一個:這麼多整年裡面有多少閏年。這就需要了解公曆的置閏規則了。 我們知道,公曆的平年是365天,閏年是366天。置閏的方法是能被4整除的年份在 2月加一天,但能被100整除的不閏,能被400整除的又閏。因此,像1600、2000、2400 年都是閏年,而1700、1800、1900、2100年都是平年。公元前1年,按公曆也是閏年。 因此,對於從公元前1年(或公元0年)12月31日到某一日子的年份Y之間的所有整年 中的閏年數,就等於 [(Y-1)/4] - [(Y-1)/100] + [(Y-1)/400], [...]表示只取整數部分。第一項表示需要加上被4整除的年份數,第二項表示需要去掉 被100整除的年份數,第三項表示需要再加上被400整除的年份數。之所以Y要減一,這 樣,我們就得到了第一個計算某一天是星期幾的公式: W = (Y-1)*365 + [(Y-1)/4] - [(Y-1)/100] + [(Y-1)/400] + D. (1) 其中D是這個日子在這一年中的累積天數。算出來的W就是公元前1年(或公元0年)12月 31日到這一天之間的間隔日數。把W用7除,餘數是幾,這一天就是星期幾。比如我們來 算2004年5月1日: W = (2004-1)*365 + [(2004-1)/4] - [(2004-1)/100] + [(2004-1)/400] + (31+29+31+30+1) = 731702, 731702 / 7 = 104528……6,餘數為六,說明這一天是星期六。這和事實是符合的。