我使用以下代码获取当前日期时间(山区时间)
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
对于我出错的任何建议,时间是错误的吗?
答案 0 :(得分:0)
据我了解wrong time
表示它与预期有一小时的差异,即-4小时而不是预期的-5小时。如果是,那么问题是us_std
类型被指向local_adjustor
声明的最后一个参数。如果要指定no_dst
而不是use_dst
。代码的工作原理如下,差异为-5小时。以下代码演示了它(link to online compiled version)
#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;
}