在MinGW中,difftime返回不正确的值

我试图计算两个time_t之间的差异。
但是difftime返回它的第一个参数,而不是差别!
我的代码是:

  #include <windows.h> #include <stdio.h> #include <time.h> #include <unistd.h> int main(){ time_t etime_t,now_t; double time_diff; now_t=1388525484L; etime_t=1389338644L; time_diff=difftime(now_t,etime_t); printf("%f",time_diff); } 

它打印:

 1388525484.000000 

我正在编译GCCMinWG
问题是什么?

一个MinGw的错误。 它们将difftime编译为标准windows函数的调用。 但是,即使参数是64位,它们也会调用32位版本的difftime。 这给出了预期的结果,因为它将下半部分的第一个参数(即0)的更高的一半减去。 在这里查看错误报告 。 它可以通过插入来暂时固定

 #define _USE_32BIT_TIME_T 1 

之前包括time.h

 /*my little lab:*/ #include <sys/types.h> #include <stdio.h #include <time.h> #include <unistd.h> int main(void) { time_t etime_t, now_t; struct tm timev_n; struct tm timev_e; struct tm *ptimev_n = &timev_n; struct tm *ptimev_e = &timev_e; double time_diff; now_t= 1388525484L; etime_t= 1389338644L; ptimev_n= gmtime_r(&now_t, ptimev_n ); ptimev_e= gmtime_r(&etime_t, ptimev_e ); printf (" now: %s \n", asctime(ptimev_n)); printf (" end: %s \n", asctime(ptimev_e)); // time_diff=difftime(now_t,etime_t); time_diff=difftime(etime_t, now_t); printf("%f \n",time_diff); etime_t = (time_t) time_diff; ptimev_e= gmtime_r(&etime_t, ptimev_e ); printf ("back to the 70's diff: %s \n", asctime(ptimev_e)); return 1; } 

给出输出:

“现在:2013年12月31日21:31:24

结束:2014年1月10日星期五07:24:04

813160.000000回到70年代差异:星期六1月10日09:52:40 1970“请检查参数的顺序difftime,也许你的系统有unsigned time_t?