Преобразование Boost Ptime в EST UTC-5: 00
Я использую следующий код, чтобы получить текущее время даты (Горное время)
const boost::posix_time::ptime now = boost::posix_time::second_clock::local_time();
//In mountain time I get now = 2013-Apr-08 20:44:22
Теперь я использую следующий метод преобразования
ptime FeedConnector::MountaintToEasternConversion(ptime coloTime)
{
return boost::date_time::local_adjustor <ptime, -5, us_dst>::utc_to_local(coloTime);
}
//предполагается, что эта функция дает мне время в Нью-Йорке (Восточное стандартное время), и я получаю
2013-Apr-08 16:44:22
Thsi time is wrong любое предположение, где я иду неправильно ?
1 ответ:
Насколько я понимаю,
wrong time
означает, что она имеет одну часовую разницу с ожидаемой, т. е. -4 часа вместо ожидаемых -5 часов. Если да, то проблема заключается в том, что типus_std
указывается в качестве последнего параметра объявленияlocal_adjustor
. Если указатьno_dst
вместоuse_dst
. Код работает как рассуждал и разница составляет -5 часов. Следующий код демонстрирует это (ссылка на онлайн скомпилированную версию)#include <boost/date_time/posix_time/posix_time.hpp> #include <boost/date_time/local_time_adjustor.hpp> #include <iostream> int main(void) { const boost::posix_time::ptime now = boost::posix_time::second_clock::local_time(); const boost::posix_time::ptime adjUSDST = boost::date_time::local_adjustor<boost::posix_time::ptime, -5, boost::posix_time::us_dst>::utc_to_local(now); const boost::posix_time::ptime adjNODST = boost::date_time::local_adjustor<boost::posix_time::ptime, -5, boost::posix_time::no_dst>::utc_to_local(now); std::cout << "now: " << now << std::endl; std::cout << "adjUSDST: " << adjUSDST << std::endl; std::cout << "adjNODST: " << adjNODST << std::endl; return 0; }