发新帖我要提问
12
返回列表
打印

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

[复制链接]
楼主: gdmgb520
手机看帖
扫描二维码
随时随地手机跟帖
21
gdmgb520|  楼主 | 2009-8-30 20:54 | 只看该作者 回帖奖励 |倒序浏览
13# 救火车

13楼的意思我不是很明白。

使用特权

评论回复
22
gdmgb520|  楼主 | 2009-8-30 20:56 | 只看该作者
14# wlsui

呵呵,我也是第一次遇到这个问题,不知道该怎么做,自己在网上搜了一下也没有找到多少相关的资料,后面自己就想出了这么个思路。我还是想看看前人的思路的。

使用特权

评论回复
23
一级菜鸟| | 2009-8-30 20:58 | 只看该作者
13# 救火车  

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


他可能笔误,要表述的是时间差不能跨天

使用特权

评论回复
24
zgl7903| | 2009-8-31 08:47 | 只看该作者
参考一下我的博客代码,以前的昨天整理了一下
http://blog.csdn.net/zgl7903/archive/2009/08/30/4498880.aspx

使用特权

评论回复
25
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
        {}




大家在看看,会不会有漏判或误判的情况。

使用特权

评论回复
26
gdmgb520|  楼主 | 2009-8-31 15:39 | 只看该作者
大家有空帮我看看哈:lol

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则