boost posix_time 的意外结果
Unexpect result from boost posix_time
当我在我的 ubuntu 中 运行 时,我得到了最低的结果。这会出什么问题?结果年份不可能是 1970 年,当我将 ms
重新转换回来时,结果不一样了。但是当我 运行 它在 http://coliru.stacked-crooked.com/ 时它很好。
#include <boost/date_time/gregorian/gregorian.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
#include <string>
#include <iostream>
int main()
{
using namespace boost::posix_time;
ptime time_t_epoch(boost::gregorian::date(1970,1,1));
auto ms = (boost::posix_time::microsec_clock::local_time() - time_t_epoch).total_microseconds();
std::cout << "ms: " << ms << std::endl;
std::cout << "ms: " << boost::posix_time::microseconds(ms).total_microseconds() << std::endl;
ptime newTime = time_t_epoch + boost::posix_time::microseconds(ms);
std::cout << boost::posix_time::to_iso_string(time_t_epoch) << std::endl;
std::cout << boost::posix_time::to_iso_string(newTime) << std::endl;
std::stringstream ss;
ss << newTime;
std::cout << ss.str()<< std::endl;
}
结果:
ms: 1424976249761218
ms: 4576956085582
19700101T000000
19700222T232236.085582
1970-Feb-22 23:22:36.085582
机器环境=Ubuntu12+cmake 2.8.7+boost 1.48.0.2
1970/01/01 + 4576956085582 微秒 -> 1970-Feb-22 是正确的
1970/01/01 + 1424976249761218 微秒 -> 2015-Feb-26 所以 ms
大概是正确的
不正确的是
boost::posix_time::microseconds(ms).total_microseconds() != ms
可能与这个错误有关https://svn.boost.org/trac/boost/ticket/3487虽然我不确定。
当我在我的 ubuntu 中 运行 时,我得到了最低的结果。这会出什么问题?结果年份不可能是 1970 年,当我将 ms
重新转换回来时,结果不一样了。但是当我 运行 它在 http://coliru.stacked-crooked.com/ 时它很好。
#include <boost/date_time/gregorian/gregorian.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
#include <string>
#include <iostream>
int main()
{
using namespace boost::posix_time;
ptime time_t_epoch(boost::gregorian::date(1970,1,1));
auto ms = (boost::posix_time::microsec_clock::local_time() - time_t_epoch).total_microseconds();
std::cout << "ms: " << ms << std::endl;
std::cout << "ms: " << boost::posix_time::microseconds(ms).total_microseconds() << std::endl;
ptime newTime = time_t_epoch + boost::posix_time::microseconds(ms);
std::cout << boost::posix_time::to_iso_string(time_t_epoch) << std::endl;
std::cout << boost::posix_time::to_iso_string(newTime) << std::endl;
std::stringstream ss;
ss << newTime;
std::cout << ss.str()<< std::endl;
}
结果:
ms: 1424976249761218
ms: 4576956085582
19700101T000000
19700222T232236.085582
1970-Feb-22 23:22:36.085582
机器环境=Ubuntu12+cmake 2.8.7+boost 1.48.0.2
1970/01/01 + 4576956085582 微秒 -> 1970-Feb-22 是正确的
1970/01/01 + 1424976249761218 微秒 -> 2015-Feb-26 所以 ms
大概是正确的
不正确的是
boost::posix_time::microseconds(ms).total_microseconds() != ms
可能与这个错误有关https://svn.boost.org/trac/boost/ticket/3487虽然我不确定。