//时间和日期函数 计算时间差
#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;
}
运行结果:
望采纳!