Я использую следующий код, чтобы получить текущее время (горное время)
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
Это время неправильно любое предложение, где я иду не так?
Насколько я понимаю 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;
}
Других решений пока нет …