1. 程式人生 > >C++中星期幾計算公式

C++中星期幾計算公式

蔡勒公式(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;

蔡勒公式只適合於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前的事情,貌似大家暫時也用不到,可以瞭解,有問題可以直接查。有點錯誤修正一下。