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