Столкнулся с такой вот аномалией.
| Код | 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
|
Из опыта знаю, что когда что-то не получается, то глючит не что-то, а я сам. Но здесь...... |