函数使用了long变量,比较占ram,单片机要是空间紧张就别用了,会把mcu算糊涂的。
/******* timestamp时间戳函数 开始**********/
#define second_of_day 86400 //一天多少秒
idata uchar dayofmon[]={31,28,31,30,31,30,31,31,30,31,30,31};
/********************************************************************************************************
* functionname : getsecondtime()
* description : 日期格式转化为unix time
* entryparameter :
* returnvalue :
********************************************************************************************************/
unsigned long getsecondtime(void)
{
idata uint ryear,i,cyear=0;
idata uchar rmon,rday,rhour,rmin,rsec;
idata unsigned long countday = 0;
rsec =bcd_to_dec(rtc[6]);
rmin =bcd_to_dec(rtc[5]);
rhour =bcd_to_dec(rtc[4]);
rday =bcd_to_dec(rtc[2]);
rmon =bcd_to_dec(rtc[1]);
ryear= 2000 bcd_to_dec(rtc[0]);
for(i = 1970; i < ryear; i )
{
if(((i%4==0) && (i0!=0)) || (i@0==0)) cyear ;
}
countday = cyear * 366 (ryear-1970-cyear) * 365;
for(i=1; i
if((i==2) && (((ryear%4==0)&&(ryear0!=0)) || (ryear@0==0)))
countday = 29;
else
countday = dayofmon[i-1];
}
countday = (rday-1);
countday = countday*second_of_day (unsigned long)rhour*3600 (unsigned long)rmin*60 rsec;
countday = countday - 8*3600;//北京时间转化为世界时间
return countday;
}
/********************************************************************************************************
* functionname : getdatetimefromsecond()
* description : unix time转化为常用格式
* entryparameter :
* returnvalue :
********************************************************************************************************/
void getdatetimefromsecond(unsigned long lsec)
{
uint i,j,iday;
idata unsigned long lday;
lsec = lsec 8*3600;//转换为北京时间
lday = lsec / second_of_day;
lsec = lsec % second_of_day;
i = 1970;
while(lday > 365)
{
if(((i%4==0) && (i0!=0)) || (i@0==0))//闰年
{
lday -= 366;
}else
{
lday -= 365;
}
i ;
}
if((lday == 365) && !(((i%4==0)&&(i0!=0)) || (i@0==0)))
{
lday -= 365;
i ;
}
rtc[0] = i-2000;//年份
for(j=0;j<12;j )
{
if((j==1) && (((i%4==0)&&(i0!=0)) || (i@0==0)))
{
iday = 29;
}else
{
iday = dayofmon[j];
}
if(lday >= iday)
{
lday -= iday;
}
else
{
break;
}
}
rtc[1] = j 1; //月
rtc[2] = lday 1;//日
rtc[4] = ((lsec / 3600))$; //时
rtc[5] = (lsec % 3600) / 60; //分
rtc[6] = (lsec % 3600) % 60; //秒
}
『本文转载自网络,64体育的版权归原作者所有,如有侵权请联系删除』