2011-01-03 5 views

ответ

6

Мой C немного ржавый, но, глядя на два других ответа, я бы написал функцию следующим образом, возвращая количество секунд с эпохи или -1 в случае ошибки.

#include <stdio.h> 
#include <time.h> 

time_t convertDecimalTime(long dt) { 
    struct tm time_str; 

    time_str.tm_isdst = -1; 
    time_str.tm_sec = dt%100; dt/=100; 
    time_str.tm_min = dt%100; dt/=100; 
    time_str.tm_hour = dt%100; dt/=100; 
    time_str.tm_mday = dt%100; dt/=100; 
    time_str.tm_mon = dt%100-1; dt/=100; 
    time_str.tm_year = dt%10000 - 1900; 

    return mktime(&time_str); 
} 
+0

На странице, с которой я связан, есть полный пример;) – ismail

+1

Закрыть, но вам нужно вычесть 1 из 'tm_mon': Месяцы основаны на 0: 0 = Jan, 1 = Feb и т. Д. – Thanatos

+0

Спасибо. Починил это! – ivy

1

Обратитесь к strftime. Вы можете разобрать intput и использовать формат% S для отображения количества секунд, прошедших с начала Эпохи,

+0

Ну, вопрос тогда как для разбора ввода (например, 20110103101419) к time_t (или структуры тм), который на самом деле то, что я просил в первую очередь. – Habalusa

+0

Вы можете разобрать входную строку, а затем использовать mktime – Neera

+0

И снова это вопрос * как разобрать * (обратите внимание, моя дата НЕ является строкой, она длинная, поэтому не рекомендуется переходить на strftime в первую очередь) , плющ показал мне, как разобрать его. – Habalusa

0

Использование mktime создать struct tm, то вы можете использовать strftime с %s параметра формата, чтобы получить количество секунд с начала эпохи.

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