2014-12-21 3 views
0

У меня есть 2 временных строки и вы хотите найти разницу между ними. Мой код работает. Но он показывает разные выходы, когда я пытаюсь использовать одни и те же значения. Вот мой код:найти разницу между временами в c

#include <time.h> 
    #include <stdio.h> 
    time_t convtotime(char *time_detail,char *format){ 
     struct tm tm; 
     strptime(time_detail,format,&tm); 
     time_t t = mktime(&tm); 
     return t; 

    } 
    int main(int argc, char const *argv[]) 
    { 
     char buff[25]; 
     time_t newtime = convtotime("12/Dec/2014:10:44:19","%d/%b/%Y:%H:%M:%S"); 
     time_t oldtime = convtotime("12/Dec/2014:10:44:35","%d/%b/%Y:%H:%M:%S"); 
     printf("%lf",difftime(oldtime,newtime)); 
    } 

И это выводит:

3616.000000 

или

16.000000 
+0

Вы имеете в виду, что при выполнении этой точной программы вы получаете разные результаты? – usr2564301

+0

Yessssssssssss. – Odko

ответ

2

manual for strptime говорит:

В принципе, эта функция не инициализирует тм, но хранит только стоимость es. Это означает, что tm должен быть инициализирован до вызова.

Так попробуйте:

struct tm tm = {0}; 
strptime(time_detail, format, &tm); 

Формулировки the standard также интересно:

Не определено ли несколько вызовов к strptime(), используя ту же самую структуру тм обновит ток содержимое структуры или переписать все содержимое структуры.

+0

Таким образом, наблюдаемое смещение на один час было вызвано элементом Daylight Saving 'tm', содержащим некоторое случайное значение. Хороший улов! – usr2564301

Смежные вопросы