时间差計算

2019-12-12 18:21发布

条件如下
//输入开始 年 月 日 时 分 秒,
//输入结束 年 月 日 时 分 秒
// 计算两个时间的时间差,结果转成秒数
用 C语言,方便提供例程吗
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
18条回答
蛋定
2019-12-14 05:36
请搜时间戳的函数,然后计算。 我刚用了,贴一下:

#define SECOND_OF_DAY 3600*24
extern const uint8_t Cnst_Month_Tbl[12];
const uint8_t Cnst_Month_Tbl0[12]={31,28,31,30,31,30,31,31,30,31,30,31};

void GetDateTimeFromSecond(u32 lSec, _real_time *tTime)
{
        u16 i,j,iDay;
        u32 lDay=0,temp;
        lSec = lSec + 8*3600;//转换为北京时间
        temp=lSec;
        while(temp>SECOND_OF_DAY)
        {
                temp-=SECOND_OF_DAY;
                lDay++;
        }        
        ////lDay = lSec/SECOND_OF_DAY;  不支持除法 32位 ?? 20190227
        ////lSec = lSec%SECOND_OF_DAY;
        lSec=temp;
        i = 1970;
        while(lDay > 365)
        {
                if(((i%4==0)&&(i%100!=0)) || (i%400==0))//闰年
                        lDay -= 366;
                else
                        lDay -= 365;
                i++;
        }
        if((lDay == 365) && !(((i%4==0)&&(i%100!=0)) || (i%400==0)))
        {
                lDay -= 365;
                i++;
        }
        tTime->year = i;//年份
        for(j=0;j<12;j++)
        {
                if((j==1) && (((i%4==0)&&(i%100!=0)) || (i%400==0)))
                        iDay = 29;
                else
                        iDay = Cnst_Month_Tbl0[j];
                if(lDay >= iDay) lDay -= iDay;
                else
                        break;
        }
        tTime->month = j+1;
        tTime->day = lDay+1;
        tTime->hour = ((lSec / 3600))%24;
        tTime->min = (lSec % 3600) / 60;
        tTime->sec = (lSec % 3600) % 60;
}

一周热门 更多>