difftime возвращает неверное значение в MinGW
Я пытаюсь вычислить разницу между двумя 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
)
В чем проблема?
2 ответа
Ошибка MinGw. Они компилируют difftime для вызова стандартной функции Windows. Однако они вызывают 32-битную версию difftime, даже если аргументы 64-битные. Это дает ожидаемый результат, поскольку вычитает более высокую половину первого аргумента (который равен 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;
}
дает вывод:
сейчас: вт дек 31 21:31:24 2013
конец: пт 10 января 07:24:04 2014
813160.000000 возвращение к 70-м годам: суббота, 10 января 09:52:40 1970 "Пожалуйста, проверьте порядок параметров для difftime, может быть, ваша система имеет unsigned time_t?