VC 求指定日期是该年度的第几周算法



intGetWeekofYear(SYSTEMTIME stCur)
{
SYSTEMTIME stfirst;


SYSTEMTIME stsecond;
memset(&stsecond,0, sizeof(SYSTEMTIME));
stsecond.wDay=stCur.wDay;
stsecond.wMonth=stCur.wMonth;
stsecond.wYear=stCur.wYear;


CTime tsecond(stsecond);
    CTimeSpan ts;
int nday;
int fristweekday=CaculateWeekDay(stCur.wYear,1,1);
memset(&stfirst,0, sizeof(SYSTEMTIME));
stfirst.wDay=7-fristweekday;
stfirst.wMonth=1;
stfirst.wYear=stCur.wYear;
CTime tfirst(stfirst);
ts=tsecond-tfirst;
    nday=ts.GetDays();
if(nday<0)
return 1;
return nday/7+1+(nday%7==0?0:1);

//认为周日是每周的第一天同计算机显示
//               从1月1号开始算第一周如:1.1是星期六 1.2是星期日 那么1.1就是第一周虽然只有一天但也是第一周,1.2日就是第2周了
//

}

//算任意一天是星期几

int CaculateWeekDay(int nYear,int nMonth, int nDay)
{//基姆拉尔森计算公式
if(nMonth == 1)
{
nMonth = 13;
nYear=nYear-1;
}
if( nMonth == 2)
{
nMonth = 14;
nYear=nYear-1;


}
int nWeek = (nDay+2*nMonth+3*(nMonth+1)/5+nYear+nYear/4-nYear/100+nYear/400)%7;
int strWeekDay = 0;
switch(nWeek)
{
case 0: strWeekDay =1; break;//星期一
case 1: strWeekDay =2; break;
case 2: strWeekDay =3; break;
case 3: strWeekDay =4; break;
case 4: strWeekDay =5; break;
case 5: strWeekDay =6; break;
case 6: strWeekDay =0; break;//星期日

return strWeekDay;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值