4

我正在尝试计算两者之间的差异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

我正在编译GCC(in MinWG)有
什么问题?

4

2 回答 2

6

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

#define _USE_32BIT_TIME_T 1

在包括 time.h 之前

于 2014-01-09T10:55:49.330 回答
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;
 }

给出输出:

" 现在:2013 年 12 月 31 日星期二 21:31:24

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

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

于 2014-01-09T10:25:43.657 回答