本算法中引用的是由Tomohiko Sakamoto 提供的簡(jiǎn)潔函數(shù)代碼
代碼如下:
整體思路如下將一年看成364天(可以被7整除)
其中如果將2月看成27天
//31 27 31 30 31 30 31 31 30 31 30 31
//3 6 3 2 3 2 3 3 2 3 2 3 月天數(shù)mod7
//3 9 12 14 17 19 22 25 27 30 32 35月數(shù)的累加和
//0 3 2 5 0 3 5 1 4 6 2 4 月數(shù)-1的累加和mod7得到數(shù)組
如1年2月某日
1月有31天被7除余3 多出的3天加到2月的天數(shù)里
最后對(duì)7取余
y/4 - y/100 + y/400 //算出到y(tǒng)年12月31日為止的閏年多出29號(hào)天數(shù)的個(gè)數(shù)
y +y/4 - y/100 + y/400//上市加上y年12月31日為止每年少算一天的個(gè)數(shù)
當(dāng)x年y月z日時(shí)
如果月數(shù)小于2月 則應(yīng)當(dāng)計(jì)算y-1年多出的天數(shù)
即y -= m < 3;
y +y/4 - y/100 + y/400 + t[m-1] + d/加上1到m-1月多出天數(shù)對(duì)7取余再加上當(dāng)月的天數(shù)/
最后對(duì)7求余的出星期。
1年1月1日為星期一
intdayofweek(inty,intm,intd)/* 0 = Sunday */
{
staticintt[] = {0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4};
y -= m < 3;
return(y + y/4 - y/100 + y/400 + t[m-1] + d) % 7;
}