David953 2016-07-18 17:01 采纳率: 0%
浏览 1057

自己写的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条回答

  • 不知有晋 2016-07-18 17:03
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!