difftime在MinGW中返回不正确的值

时间:2014-01-09 08:30:35

标签: c windows time mingw time.h

我正在尝试计算两个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)进行编译 有什么问题?

2 个答案:

答案 0 :(得分:6)

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

临时修复
#define _USE_32BIT_TIME_T 1

包括time.h之前

答案 1 :(得分:1)

/*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;
 }

给出输出:

”  现在:Tue Dec 31 21:31:24 2013

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

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