我正在努力弄清楚如何使用 boost::date_time 执行转换。
我想将从 Unix 纪元(1970 年 1 月 1 日 00:00)测量的毫秒值转换为人类可读的字符串 - 类似于:2/13/2012 15:20:11
将是理想的。
我已经尝试过一些我见过的 std C++ / boost 建议,但还没有任何运气。这是我使用的代码:
long long ticksFromEpoch = 1329117220501;
std::time_t tt = static_cast<time_t>(ticksFromEpoch);
boost::posix_time::ptime dt = boost::posix_time::from_time_t(tt);
// Create a time_zone_ptr for the desired time zone and use it to create a local_date_time
boost::local_time::time_zone_ptr zone(new boost::local_time::posix_time_zone("UTC"));
boost::local_time::local_date_time dt_with_zone(dt, zone);
std::stringstream strm;
strm.imbue(std::locale(std::cout.getloc(), new boost::local_time::local_time_facet("%Y-%m-%d %H:%M:%S"))); // 15:14
strm << dt_with_zone;
// Print the stream's content to the console
std::cout << strm.str() << std::endl;
输出是:2032-07-01 20:20:37
这显然是不正确的。我怀疑我没有构建ticksFromEpoch
变量正确但我不知道为什么。有人能指出我正确的方向吗?任何帮助深表感谢!!
time_t
通常是自“纪元”以来的秒数,而不是毫秒。
如果你不关心毫秒,你应该能够这样做:
std::time_t tt = static_cast<time_t>(ticksFromEpoch/1000)
如果您确实关心毫秒,您可以将它们添加回最后(这对于像 12:00:00.001 AM 这样的时间来说是很棘手的)
或者你需要走另一条路。您可能需要使用这样的东西:(未经测试)
boost::posix_time::ptime t2(
boost::gregorian::date(1970,boost::date_time::Jan,1), //The epoch
boost::posix_time::seconds( ticksFromEpoch / 1000 ) + // Number of seconds
boost::posix_time::milliseconds( ticksFromEpoch % 1000) // And the micros too.
);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)