Всплыла ошибка в программе :( связанная с переводом часов. Не могу понять то ли это косяк в либе ACE или же она типо слишком умная и сделала это за меня
| Код | struct tm stm; ACE_OS::memset(&stm, 0, sizeof(stm)); stm.tm_year = 2009 - 1900; stm.tm_mon = 3 - 1; stm.tm_mday = 29; stm.tm_hour = 0; stm.tm_min = 0; stm.tm_isdst = -1; ACE_Time_Value value(ACE_OS::mktime(&stm));
ACE_Date_Time tmp(value); ACE_DEBUG((LM_DEBUG, ACE_TEXT("%d-%02d-%02d %02d:%02d:%02d\n"), tmp.year(), tmp.month(), tmp.day(), tmp.hour(), tmp.minute(), tmp.second()));
value += 10 * 3600; tmp.update(value); ACE_DEBUG((LM_DEBUG, ACE_TEXT("%d-%02d-%02d %02d:%02d:%02d\n"), tmp.year(), tmp.month(), tmp.day(), tmp.hour(), tmp.minute(), tmp.second()));
ACE_Time_Value v2 = value; tmp.update(v2); v2 -= ACE_Time_Value(tmp.hour() * 3600 + tmp.minute() * 60 + tmp.second()); tmp.update(v2); ACE_DEBUG((LM_DEBUG, ACE_TEXT("%d-%02d-%02d %02d:%02d:%02d\n"), tmp.year(), tmp.month(), tmp.day(), tmp.hour(), tmp.minute(), tmp.second()));
ACE_ASSERT(value == v2);
|
суть в том что я к дате прибавляю некий час(больше 3) потом с результатом что-то делаю в другом месте и там же отрезаю часы минуты секунды. так изврщаться пришлось иза либы в которой нет нормальной обертки для работы со временем.(может у меня рожа кривая)
так вот 29 марта 2009г я прибавил к этой дате 10 часов. что-то поделал нужное и потом отрезал эти 10 часов способом показанным выше.
в результате
| Код | 2009-03-29 00:00:00 прибавил 10 часов 2009-03-29 11:00:00 отнял якобы 10 часов, по факту 11 2009-03-28 23:00:00
|
как можно решить проблему - что бы при прибавлении 10 часов время стало как например в бусте(можно заюзать boost::date_time, но пока хочется решить проблему малой кровью )
| Код | boost::gregorian::date d(2009, 3, 29); boost::posix_time::ptime value2(d); std::cout << value2 + boost::posix_time::hours(10) << std::endl;
|
Заранее благодарен!
|