Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Странности и localtime 
:(
    Опции темы
JekaZZ
Дата 5.4.2010, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 6.10.2005

Репутация: нет
Всего: 3



Столкнулся с такой вот аномалией. 

Код

SomeClass::SomeClass(int day, int month, int year)
{
    struct tm tm_date;

    tm_date.tm_year = year - 1900;
    tm_date.tm_mon = month - 1;
    tm_date.tm_mday = day;
    tm_date.tm_hour = 0;
    tm_date.tm_min = 0;
    tm_date.tm_sec = 0;

    m_date = mktime(&tm_date); // m_date - член класса типа time_t
}

int SomeClass::day() const
{
    tm tm_this;
    localtime_r(&m_date, &tm_this);
    return tm_this.tm_mday;
}


Создаём объект класса, передавая ему день, месяц, год. Дальше идет какой-то код. Потом хотим получить день. И оказывается, что день возвращается на 1 меньше, и только для месяцев, меньших текущего. От года и дня это не зависит. Методом всё того же научного тыка был придуман костыль: если в конструкторе после m_date = mktime(&tm_date);  вызвать char* s = ctime(&m_date);, то при последующем вызове SomeClass::day() возвращается правильный день. 

Код

$ g++ --version
g++ (Ubuntu 4.4.1-4ubuntu9) 4.4.1

Из опыта знаю, что когда что-то не получается, то глючит не что-то, а я сам. Но здесь......
PM MAIL   Вверх
borisbn
Дата 5.4.2010, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



А что за функция localtime_r? MSDN такую не знает


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
JekaZZ
Дата 5.4.2010, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 6.10.2005

Репутация: нет
Всего: 3



То же самое, что и localtime, только не возвращает значение tm, а записывает его во второй параметр. 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0580 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.