Борьба с функцией mktime |
Здравствуйте, гость ( Вход | Регистрация )
Борьба с функцией mktime |
AD |
22.7.2009, 12:21
Сообщение
#1
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
стандартная функция mktime() переводит в значение типа time_t из структуры tm, НО перед этим она нормализует эту структуру? Есть ли какая-нибудь возможность избежать этой нормализации? Потому что в результате портится все время в этой структуре и в time_t записывается тоже некорректное время. Как с этим бороться?
Ну пусть структура tm заполнена так: tm_sec = 55 tm_min = 55 tm_hour = 10 tm_mday = 22 tm_mon = 6 tm_year = 109 (отсчет почему-то с 1900 года) tm_wday = 0 tm_yday = 0 tm_isdst = 0 После использования mktime так заполненной структуры, время увеличивается на час вперед, последние 3 параметра тоже меняются. Соответственно необходимо каким-то образом нормализовывать эту структуру так, чтобы mktime выдавало верный результат. А как это сделать? Последние 3 параметра в любом случае я знать не могу. |
|
|
Andrew Selivanov |
22.7.2009, 12:29
Сообщение
#2
|
Участник Группа: Участник Сообщений: 249 Регистрация: 9.10.2007 Из: Москва Пользователь №: 3 Спасибо сказали: 15 раз(а) Репутация: 6 |
Большая и любимая тема здесь нужно вдумчиво читать описание функции: http://www.opengroup.org/onlinepubs/009695...ons/mktime.html
Цитата: Цитата The original values of the tm_wday and tm_yday components of the structure are ignored, and the original values of the other components are not restricted to the ranges described in <time.h>. И важный момент с DST: Цитата A positive or 0 value for tm_isdst shall cause mktime() to presume initially that Daylight Savings Time, respectively, is or is not in effect for the specified time. A negative value for tm_isdst shall cause mktime() to attempt to determine whether Daylight Savings Time is in effect for the specified time. То есть:
Лично я нарывался на tm_isdst инициализированный нулём что вызывало косяк в час в определённое время года Вообще функции группы gmtime/localtime/asktime лично я если и использую, то с осторожностью... ибо чревато. Для штук сложнее (с timezone например) рекомендую Boost Time. |
|
|
AD |
22.7.2009, 12:44
Сообщение
#3
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
То есть: Да тут тоже уже решил а не переписать ли с помощью Qt-шных средств. Почему-то раньше не замечал, что у QDate есть setDate(/*parameters*/), QTime - setHMS(/*parameters*/). Ну попробую и так, и так! Еще раз огромное спасибо!
Вообще функции группы gmtime/localtime/asktime лично я если и использую, то с осторожностью... ибо чревато. Для штук сложнее (с timezone например) рекомендую Boost Time. Сообщение отредактировал AD - 22.7.2009, 14:52 |
|
|
Текстовая версия | Сейчас: 25.11.2024, 20:11 |