C51编程 计算两个时间点之间的差值问题 感觉蛮有挑战性的

[复制链接]
6550|25
 楼主| gdmgb520 发表于 2009-8-30 20:54 | 显示全部楼层
13# 救火车

13楼的意思我不是很明白。
 楼主| gdmgb520 发表于 2009-8-30 20:56 | 显示全部楼层
14# wlsui

呵呵,我也是第一次遇到这个问题,不知道该怎么做,自己在网上搜了一下也没有找到多少相关的资料,后面自己就想出了这么个思路。我还是想看看前人的思路的。
一级菜鸟 发表于 2009-8-30 20:58 | 显示全部楼层
13# 救火车  

13楼的意思我不是很明白。
gdmgb520 发表于 2009-8-30 20:54


他可能笔误,要表述的是时间差不能跨天
zgl7903 发表于 2009-8-31 08:47 | 显示全部楼层
参考一下我的博客代码,以前的昨天整理了一下
http://blog.csdn.net/zgl7903/archive/2009/08/30/4498880.aspx
 楼主| gdmgb520 发表于 2009-8-31 14:28 | 显示全部楼层
我今天改了一下方案。现在思路如下:
建两个表
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
        {}




大家在看看,会不会有漏判或误判的情况。
 楼主| gdmgb520 发表于 2009-8-31 15:39 | 显示全部楼层
大家有空帮我看看哈:lol
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部