2013-06-26 4 views
-2

Я пытаюсь рассчитать разницу дат между двумя датами, используя mktime и difftime. Одна из дат - struct tm внутри другой struct, а другая дата - struct tm внутри main. mktime работает нормально один на день внутри main, но сохраняет возврат -1 на дату внутри struct. Я думаю, что я пропускаю что-то довольно очевидное о том, как получить доступ к struct внутри struct, но я не смог найти ответ. Заранее спасибо.struct tm внутри другой struct - c

Код ниже

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

struct consulta_cand { 
    struct tm nascimento; 
}; 

int main(void) 
{ 
    struct consulta_cand candidato; 
    time_t now; 
    struct tm final2012; 
    double timeprint; 

    now = time(NULL); 
    final2012 = *localtime(&now); 
    final2012.tm_mday = 28; 
    final2012.tm_mon = 10 - 1; 
    final2012.tm_year = 2012 - 1900; 
    final2012.tm_hour = 23; 
    final2012.tm_min = 59; 
    final2012.tm_sec = 59; 

    timeprint = mktime(&final2012); 
    printf("%.f\n", timeprint); 

    candidato.nascimento = *localtime(&now); 
    candidato.nascimento.tm_mday = 14; 
    candidato.nascimento.tm_mon = 10 - 1; 
    candidato.nascimento.tm_year = 1967 - 1900; 
    candidato.nascimento.tm_hour = 0; 
    candidato.nascimento.tm_min = 0; 
    candidato.nascimento.tm_sec = 0; 

    timeprint = mktime(&candidato.nascimento); 
    printf("%.f\n", timeprint); 

    return 0; 
} 
+0

Какая ОС вы тестируете? – alk

+0

Windows 7, с TDM-GCC 64-bit –

ответ

0

Нет проблем с доступом к структуре. Проблема - это дата до 1970 года, которую mktime() не принимает.

0

Эти даты функции основаны на эпоху года: 1970. Вы используете 1967 год.

В стороне: Деннис Ритчи хотел эпоху в 1970 году, чтобы значения (как отрицательные, так и положительные) охватывали всю его жизнь. (Или так он однажды сказал в интервью.)

+0

Спасибо, проблема была именно в этом. –

0

Уверен, что он возвращает -1, но не просто отрицательное значение, типичное -69987600, которое находится в секундах с 1 января 1970 года (назад) 14 октября 1967 года?

Эта дата 1967 является до начала Epoch времени, поэтому его Epoch представление Negativ.

+0

Да, в Windows он возвращал -1, когда я попытался использовать * nix box, он ответил отрицательным значением. –