crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Борьба с функцией mktime
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
AD Дата 22.7.2009, 12:44
 
Цитата(Andrew Selivanov @ 22.7.2009, 13:29) *
То есть:
Вообще функции группы gmtime/localtime/asktime лично я если и использую, то с осторожностью... ибо чревато.

Для штук сложнее (с timezone например) рекомендую Boost Time.
Да тут тоже уже решил а не переписать ли с помощью Qt-шных средств. Почему-то раньше не замечал, что у QDate есть setDate(/*parameters*/), QTime - setHMS(/*parameters*/). Ну попробую и так, и так! :) Еще раз огромное спасибо!
Andrew Selivanov Дата 22.7.2009, 12:29
  Большая и любимая тема 8) здесь нужно вдумчиво читать описание функции: 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 =  0 // DST нет
tm_isdst =  1 // DST есть
tm_isdst = -1 // определить есть ли DST для этого времени


Лично я нарывался на tm_isdst инициализированный нулём что вызывало косяк в час в определённое время года :)

Вообще функции группы gmtime/localtime/asktime лично я если и использую, то с осторожностью... ибо чревато.

Для штук сложнее (с timezone например) рекомендую Boost Time.
AD Дата 22.7.2009, 12:21
  стандартная функция 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 параметра в любом случае я знать не могу.
Просмотр темы полностью (откроется в новом окне)
RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 10.7.2025, 21:05