2019-12-12 18:21发布
tomzbj 发表于 2019-3-12 09:18 在啥平台上?linux的话直接把两个时间都转成timestamp然后相减就行了。没有time库的话。。得自己实现一下ti ...
最多设置5个标签!
不个定要在linux平台,只要有time库就可以转换。
#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;
}
一周热门 更多>