自己写的mkttime函数,不知道为什么总是和mkttime函数差接近8个小时

做的是基于C8051F310的脉冲计数项目,要记录脉冲来的时间,现在C51中没有mkttime函数,自己写了一个,单独放出来在VC上测试

#include
#include

#define u8 unsigned char
#define u16 unsigned int

struct date{
u16 year;
u8 month,day,hour,min,sec;
}d2={2016,7,19,0,29,0};
unsigned long int_time=0;

main() //计算时间

{
u16 i;
u16 j;

i=((d2.year)-1970);
j=i-i%4; //i年数,j是i中4的最大倍数
switch(i%4)
{case 0: int_time=j/4*(365*4+1)*24*3600;
break;
case 1: int_time=j/4*(365*4+1)*24*3600+365*24*3600;
break;
case 2: int_time=j/4*(365*4+1)*24*3600+2*365*24*3600;
break;
case 3: int_time=j/4*(365*4+1)*24*3600+(3*365+1)*24*3600;
break;
}
switch(d2.month)
{case 1: break;
case 2: int_time+=31*24*3600;
break;
case 3: int_time+=(31+28)*24*3600;
break; //*算完月再判断是否是闰年*/
case 4: int_time+=(31+28+31)*24*3600;
break;
case 5: int_time+=(31+28+31+30)*24*3600;
break;
case 6: int_time+=(31+28+31+30+31)*24*3600;
break;
case 7: int_time+=(31+28+31+30+31+30)*24*3600;
break;
case 8: int_time+=(31+28+31+30+31+30+31)*24*3600;
break;
case 9: int_time+=(31+28+31+30+31+30+31+31)*24*3600;
break;
case 10: int_time+=(31+28+31+30+31+30+31+31+30)*24*3600;
break;
case 11: int_time+=(31+28+31+30+31+30+31+31+30+31)*24*3600;
break;
case 12: int_time+=(31+28+31+30+31+30+31+31+30+31+30)*24*3600;
break;
}

int_time+=((d2.day-1)*24*3600+d2.hour*3600+d2.min*60+d2.sec);
if((d2.month!=1)&&(d2.month!=2)&&((d2.year%4)==0)) //闰年
{
int_time+=24*3600 ;
}
printf("%ld",int_time);

}

求高手解答

1个回答

8个小时!!第一个想到的是--没有设置时区

David953
David953 你的意思是mkttime函数的现在实际时间跟我的差了一个时区么?所以差不多8小时吗?很有可能
4 年多之前 回复
David953
David953 设置什么时区、。。我现在就是算一个时刻到1970.1.1 0:0:0秒的秒数差
4 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问