Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > С/С++
Перезагрузить страницу Борьба с функцией mktime
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
AD AD вне форума
Member
 
Сообщений: 575
Сказал(а) спасибо: 7
Поблагодарили 3 раз(а) в 3 сообщениях
Регистрация: 15.07.2009
По умолчанию Борьба с функцией mktime - 22.07.2009, 13:58

стандартная функция 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 параметра в любом случае я знать не могу.
Ответить с цитированием
  (#2 (permalink)) Старый
AD AD вне форума
Member
 
Сообщений: 575
Сказал(а) спасибо: 7
Поблагодарили 3 раз(а) в 3 сообщениях
Регистрация: 15.07.2009
По умолчанию 22.07.2009, 20:05

Смысл в том, что у структуры tm атрибут tm_isdst должен быть равен -1, чтобы не учитывался флаг времени суток.
По-умолчанию, это поле ставилось в 0 - и это было ошибкой. Сейчас все переделано под Qt-шные средства.

Код:
/// Получение из прочитанного из лога слова значения  
PARAMVALUE DateParamDescr::GetValue(uint word)
{
//...............

   Suint day = /*any*/;
    Suint month = /*any*/;
    Suint year = /*any*/;

    c_date.setDate(year, month, day); // c_date have type QDate

// ..................

    return /*any*/;
}
Код:
/// Получение из прочитанного из лога слова значения  
PARAMVALUE TimeParamDescr::GetValue(uint word)
{
  // .........

    Suint second = /*any*/;
    Suint minute = /*any*/;
    Suint hour = /*any*/;

// ...............
        c_time.setHMS(hour, minute, second); // c_time have type QTime

return /*any*/;

}

/// Получение из прочитанного из лога слова значения  
PARAMVALUE TimeDateParamDescr::GetValue(uint word)
{
// ..........................

    QDateTime ts(c_date, c_time);
    uint value = ts.toTime_t();

//.......................

  return /*any*/;
}
Qt - шные средства, как я выяснил, более безопасны при использовании!
Ответить с цитированием
  (#3 (permalink)) Старый
Влад Влад вне форума
Специалист
 
Сообщений: 3,884
Сказал(а) спасибо: 1
Поблагодарили 25 раз(а) в 25 сообщениях
Регистрация: 27.06.2002
Адрес: Санкт-Петербург
По умолчанию 23.07.2009, 13:04

Чего и следовало ожидать. Qt- более высокоуровневая, а следовательно, и более безопасная и комфортная библиотека, чем C Runtime Library.


The difference between theory and practice is that in theory, there is no difference between theory and practice, but in practice, there is.
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с функцией zterry С/С++ 3 16.11.2011 13:31
Борьба с порно-баннерами biafem Антивирусы 2 22.08.2011 12:45
борьба с вируснёй mino Любые вопросы от новичков 3 11.07.2011 20:29
борьба с температурой DeLuXc Видеокарты 23 29.01.2011 18:35
Борьба с крякозябрами в консольном приложении Gock С/С++ 8 11.11.2009 16:06
Борьба с масивами как сделать разницу Serbery Delphi 5 27.02.2009 00:57
Борьба с исчерпанием стека raydac Prolog 45 27.01.2009 12:03
Началась борьба с пиратством Gulf_Stream Мысли вслух 53 16.01.2007 00:21
Как работать с функцией SelectDirectory FANTOM181 C++ Builder 9 28.04.2006 18:56
Борьба с утечкой памяти Andrdandr Мысли вслух 3 17.02.2005 17:49
Проблема с функцией explode TiViSpider PHP 3 24.05.2004 22:32
FreePascal, борьба с компилятором под Linux Yttrium Общие вопросы программирования 2 28.03.2004 01:51



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов