//操作:判定工作日
//nDayOfWeek:星期几
bool IsWorkDay(int nYear,int nMon,int nDay,int &nDayOfWeek/*OUT*/)
{
bool bRes = false;
//算法如下:
//基姆拉尔森计算公式
//W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7
//在公式中d表示日期中的日数,m表示月份数,y表示年数。
//注意:在公式中有个与其他公式不同的地方:
//把一月和二月看成是上一年的十三月和十四月,例:如果是2004-1-10则换算成:
//2003-13-10来代入公式计算。
if(nMon == 1)
{
nMon = 13;
nYear -= 1;
}
if(nMon == 2)
{
nMon = 14;
nYear -= 1;
}
int nWeek=(nDay+2*nMon+3*(nMon+1)/5+nYear+nYear/4-nYear/100+nYear/400)%7;//基姆拉尔森计算公式
switch(nWeek)
{
case 0: //星期一
case 1: //星期二
case 2: //星期三
case 3: //星期四
case 4: //星期五
bRes = true;
break;
case 5: //星期六
case 6: //星期日
bRes = false;
break;
}
nDayOfWeek = nWeek;
return bRes;
}
判定某天是否市工作日(基姆拉尔森计算公式)
最新推荐文章于 2023-10-18 20:04:44 发布