我今天改了一下方案。现在思路如下:
建两个表
uint code date_tab1[12]={0,31,59,90,120,151,181,212,243,273,304,334}; //非闰年月份数所对应的天数表
uint code date_tab2[12]={0,31,60,91,121,152,182,213,244,274,305,335}; //闰年月份数对应的天数
1、先算出这个日期在该年中是第几天(因为每年的天数是确定的365或366)
代码如下:
uint Date_Estimate(uchar year, uchar month, uchar day)
{
uint order;
uchar y,m,d;
y=year;
m=month;
d=day;
if (y%4==0) //是闰年
{
order=date_tab2[m];
}
else
{
order=date_tab1[m];
}
order=order+d;
return order;
}
2、然后判断年差(任务年-系统年),并作相应处理,代码如下:
if (year_gap==0) //两个日期在同一年,他们之间的天差可以直接求
{
day_gap=Date_Estimate(Syear,Smonth,Sday)-Date_Estimate(Oyear,Omonth,Oday); //算出这两个人日期之间的天差
time_gap=day_gap*86400+hour_gap*3600+minute_gap*60+second_gap; 算出
if (time_gap<=time_threshold && time_gap>=0)
{ time_flag=1; }
else
{ time_flag=0; }
}
else if (year_gap==1) //任务日期比系统日期晚一年,所以任务日期应该加上前一年的天数
{
day_gap=Date_Estimate(Syear,Smonth,Sday)-Date_Estimate(Oyear,Omonth,Oday); //算出这两个人日期之间的天差
if (Syear%4==0) //系统年是闰年
{ day_gap=day_gap+366; }
else
{ day_gap=day_gap+365; }
time_gap=day_gap*86400+hour_gap*3600+minute_gap*60+second_gap;
if (time_gap<=time_threshold && time_gap>=0) //time_thresholds是设定的时间限
{ time_flag=1; } //时间满足标志
else
{ time_flag=0; }
}
else
{}
大家在看看,会不会有漏判或误判的情况。 |