C++中星期幾計算公式
阿新 • • 發佈:2019-02-03
蔡勒公式(Zeller):是一個計算星期的公式。
隨便給一個日期,就可以使用這個公式推算出事星期幾。
公式如下:Weeks = [C/4] - 2C + y + [y/4] + [13*(M +1)/5] + d -1;
或者是Weeks = y + [y/4] + [c/4] - 2c + [26(m + 1)/10] + d - 1;
公式中的符號含義如下:
Weeks:星期總數;用7取模得:1,2,3,4,5,6,0 對應星期一到星期日
C:世紀-1(前兩位數)
Y:年(後兩位數)
M:月(m大於等於3,小於等於14,即在蔡勒公式中,某年的1、 2月要看做上一年的13、 14月來計算,比如2003年1月1日要看做2002年的13月1日來算)
D:Day代表取整
若要計算的日期是在1582年10月4日或之前,公式則為 Weeks=Y+[Y/4] + [C/4] -2C + [13(m+1)/5] + d + 2;
隨便給一個日期,就可以使用這個公式推算出事星期幾。
公式如下:Weeks = [C/4] - 2C + y + [y/4] + [13*(M +1)/5] + d -1;
或者是Weeks = y + [y/4] + [c/4] - 2c + [26(m + 1)/10] + d - 1;
公式中的符號含義如下:
Weeks:星期總數;用7取模得:1,2,3,4,5,6,0 對應星期一到星期日
C:世紀-1(前兩位數)
Y:年(後兩位數)
M:月(m大於等於3,小於等於14,即在蔡勒公式中,某年的1、 2月要看做上一年的13、 14月來計算,比如2003年1月1日要看做2002年的13月1日來算)
D:Day代表取整
若要計算的日期是在1582年10月4日或之前,公式則為 Weeks=Y+[Y/4] + [C/4] -2C + [13(m+1)/5] + d + 2;
蔡勒公式只適合於1582年10月15日之後的情形。羅馬教皇格里高利十三世在1582年組織了一批天文學家,根據哥白尼日心說計算出來的資料,對儒略曆做了修改。將1582年10月5日到14日之間的10天宣佈撤銷,繼10月4日之後為10月15日。後來人們將這一新的歷法稱為“格里高利曆”,也就是今天世界上所通用的歷法,簡稱格里曆或公曆。
比如說計算今天的星期幾:
//蔡勒公式計算星期幾; int DayOfTheWeek(int nYear, int nMonth, int nDay) { //Y+[Y/4] + [C/4] - 2C + [26(M+1)/10] + d -1;Y 2016中的16,C代表20, m是month,day是日; int nHelpYear = 0; int nHelpMonth = 0; if(nMonth==1 || nMonth ==2) { nHelpYear = nYear - 1; nHelpMonth = 12 + nMonth; } else { nHelpYear = nYear; nHelpMonth = nMonth; } int nY = nHelpYear/ 100; int nC = nHelpYear% 100; int nWeeks = nY + nY / 4 + nC / 4 - 2 * nC + 26 * (nHelpMonth + 1) / 10 + nDay - 1; int nWeek = nWeeks % 7; if (nWeek >= 0) { return nWeek; } else { return nWeek + 7; } }
當然對於裡面1900前的事情,貌似大家暫時也用不到,可以瞭解,有問題可以直接查。有點錯誤修正一下。