2016-12-16 5 views
1

я подготовить следующую структуру:Неожиданное значение, возвращаемое указываете ей()

struct tm tDepartureTime; 
tDepartureTime.tm_min = 24; 
tDepartureTime.tm_hour = 13; 
tDepartureTime.tm_mday = 11; 
tDepartureTime.tm_mon = 2 - 1; 
tDepartureTime.tm_year = 2017 - 1900; 

потом использовать указываете ей(), чтобы получить количество секунд.

unsigned long qTime = mktime(&tDepartureTime); 

но он возвращает мне номер который является эквивалентом для временной метки 09.11.2024. Где может быть проблема?

+0

Вы предполагали, что дата будет в феврале 2017 года? (Значения 'tm_mon' работают от 0 до января до 11 декабря.) –

+0

@JonathanLeffler, да, Джонатан, он был предназначен для февраля. В любом случае, спасибо за уведомление. –

+0

ОК. Поскольку вы написали '2017 - 1900', но не писали' 2 - 1', я не был уверен, но это не оказало существенного влияния на ваш вопрос. –

ответ

3

Некоторые поля вашей архитектуры tm неинициализированы. В частности, это tm_sec, tm_mday, tm_wday, tm_yday и tm_isdst.

Из них вам необходимо вручную установить, по крайней мере, tm_sec. Если его значение случайным образом заканчивается очень высоким, это объясняет время в будущее.

Вы также можете инициализировать всю структуру нулями, изменив первую строку на struct tm tDepartureTime = {0}. Это, вероятно, лучшее решение.

+0

Значения 'tm_wday',' tm_yday' не имеют значения и являются задан как побочный эффект вызова 'mktime()'. Значение было установлено для 'tm_mday'. Как вы правильно сказали, значение в 'tm_sec' не было установлено, а фактическое значение, вероятно, было довольно большим. –

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