A-A+
判断某天是周几的基姆拉尔森算法
在进行时间方面的程序设计时经常会遇到需要判断给定的某年某天某月是周几。下面将采用基姆拉尔森算法来解决此问题。
1.基姆拉尔森算法
基姆拉尔森计算公式:
W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7
在公式中d表示日期中的日数,m表示月份数,y表示年数。
得到的结果中0-6分别代表周一至周日,即0代表周一,1代表周二……
注意:在公式中有个与其他公式不同的地方:
把一月和二月看成是上一年的十三月和十四月,例:如果是2004-1-10则换算成:2003-13-10来代入公式计算。
以公元元年为参考,公元元年1月1日为星期一。
2. 实现函数
所用编译器:Visual Studio 2008
int CTimeHandle::DayJudgeWeek(int iyear, int imonth, int iday)
{
if(imonth == 1 | imonth == 2)
{
imonth += 12;
iyear--;
}
int iweek;
iweek = (iday + 2 * imonth + 3 * (imonth + 1) / 5 + iyear + iyear / 4 -iyear / 100 +iyear / 400) % 7 + 1;
return iweek;
}
注:此函数对基姆拉尔森算法进行了更改,在原结果上加1,即结果1代表周一,2代表周二……7代表周日。