C语言中用difftime计算两个时间差问题,求解!

//时间和日期函数 计算时间差

#include "stdio.h"
#include "time.h"

int main()
{
time_t t1,t2;
struct tm timeptr1,timeptr2;
timeptr1.tm_mday=1;
timeptr1.tm_mon=1;
timeptr1.tm_year=timeptr1.tm_sec=timeptr1.tm_min=timeptr1.tm_hour=timeptr1.tm_wday=timeptr1.tm_yday=timeptr1.tm_isdst=0;
timeptr2.tm_mday=2;
timeptr2.tm_mon=1;
timeptr2.tm_sec=5;
timeptr2.tm_year=timeptr2.tm_min=timeptr2.tm_hour=timeptr2.tm_wday=timeptr2.tm_yday=timeptr2.tm_isdst=0;
t1=mktime(&timeptr1);
t2=mktime(&timeptr2);
printf("时间差:\n>> %lf\n",difftime(t2,t1));
return 0;
}

vc编译连接都没有问题,可是为什么结果都是0,求解!

你好。


问题分析:

time_t 只能表示从 1970年1月1日0时0分0秒 到此时的秒数,1970年1月1日0时0分0秒 以前的时间它是无法表示的。而 struct tm 的成员变量 tm_year 的值为实际年份减去 1900,你的程序中给 timeptr1.tm_year 和 timeptr2.tm_year 都赋值为 0,就相当于这两个时间都是 1900 年,1900 年在 1970年1月1日0时0分0秒 以前,所以用 mktime 函数计算的结果 time_t 是无法表示的,t1 和 t2 的结果就都是 0,最终 difftime(0,0) 结果当然也是 0。


解决方案:

给 struct tm 的成员变量 tm_year 一个大于 70 的值如 71,即 1971年,总之保证这个时间在 1970年1月1日0时0分0秒 之后即可。


程序清单:

#include "stdio.h"

#include "time.h"


int main()

{

time_t t1,t2;

struct tm timeptr1,timeptr2;


timeptr1.tm_mday=1;

timeptr1.tm_mon=1;

timeptr1.tm_year=1971-1900;

timeptr1.tm_sec=timeptr1.tm_min=timeptr1.tm_hour=

timeptr1.tm_wday=timeptr1.tm_yday=timeptr1.tm_isdst=0;


timeptr2.tm_mday=2;

timeptr2.tm_mon=1;

timeptr2.tm_sec=5;

timeptr2.tm_year=1971-1900;

timeptr2.tm_min=timeptr2.tm_hour=timeptr2.tm_wday=

timeptr2.tm_yday=timeptr2.tm_isdst=0;


t1=mktime(&timeptr1);

t2=mktime(&timeptr2);

printf("时间差:\n>>  %lf\n",difftime(t2,t1));


system("pause");

return 0;

}


运行结果:


望采纳!

温馨提示:答案为网友推荐,仅供参考
相似回答