C difftime在MinGW中返回不正确的值
我正试图计算两个C difftime在MinGW中返回不正确的值,c,windows,time,mingw,time.h,C,Windows,Time,Mingw,Time.h,我正试图计算两个时间\u 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;
时间\u 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);
}
我正在使用GCC
(在MinWG
)编译有什么问题吗?
/*我的小实验室:*/
/*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;
}
#包括
#包括一个小虫子。它们将difftime编译为标准windows函数的调用。但是,即使参数为64位,它们也会调用difftime的32位版本。这将给出预期的结果,因为它将第一个参数的上半部分(即0)从下半部分减去。看见
在这里可以通过插入临时固定
#define _USE_32BIT_TIME_T 1
在包含time.h之前显然是#定义difftime(t1,t0)(double)(t1-t0)。你能试一下在printf()中直接打印“double(t1-t0)”吗代码>?(你对时间类型的实现做了一些假设,这是错误的。)@kripanad:减法没问题!只有difftime
失败@蓝精灵:什么?!有什么不同?我希望切换参数会产生负面结果!似乎difftime
不符合逻辑!(?)使用now\u t-etime\u t
而不是difftime
垃圾解决了我的问题-但我想不是difftime
的问题;-)-Thankstime\u t:这是能够表示时间的算术类型。clock_t和time_t中可表示的时间范围和精度由实现定义。“这给出了预期结果,因为它将第一个参数的上半部分(即0)从下半部分减去。”,为什么会这样,因为第一个参数是结束时间,第二个参数是开始时间(因此,参数封送是如何工作的)?在时间之前添加#define(定义)使用(32位)时间(t1)
。h
并不总能解决问题。根据个人经验,我得出结论,它必须包含在stdio.h
之前。请详细说明您的答案?
#define _USE_32BIT_TIME_T 1