是否有人知道是否有将boost::posix_time::ptime
转换为__int64
值的好方法。 (我已经编译了微秒版本,而不是纳秒版本。)
我需要以某种方式执行此操作,因为我希望将生成的__int64
存储在union
类型中,该类型将原始数据用于高性能应用程序。某些类型的Memento功能对我来说非常有用。如果可能的话,我想避免演员阵容,但如果我需要,我会诉诸他们。
答案 0 :(得分:18)
将ptime转换为整数是没有意义的,因为ptime是实际时间的抽象。基于整数的时间表示该时间作为来自时期的计数。您(可能)想要做的是从您感兴趣的时间生成time_duration,然后使用time_duration :: ticks()获取64位整数。您可能需要将结果缩放到所需的精度:
ptime myEpoch(date(1970,Jan,1)); // Or whatever your epocj is.
time_duration myTimeFromEpoch = myTime - myEpoch;
boost::int64_t myTimeAsInt = myTimeFromEpoch.ticks();
答案 1 :(得分:2)
来自文档: http://www.boost.org/doc/libs/1_40_0/doc/html/date_time/posix_time.html
boost :: int64_t ticks() 返回持续时间类型的原始计数(如果调用time_duration是special_value,则会产生不可预测的结果)。 time_duration td(0,0,0,1000); td.ticks()// - > 1000
答案 2 :(得分:1)
#include <boost/date_time/posix_time/posix_time.hpp>
// ...
uint64_t secondsSinceEpoch(const boost::posix_time::ptime& time) {
namespace bpt = boost::posix_time;
const bpt::ptime epoch = bpt::from_time_t(0);
bpt::time_duration duration = time - epoch;
return duration.total_seconds();
}
// ...
namespace bpt = boost::posix_time;
const bpt::ptime now = bpt::second_clock::local_time();
uint64_t seconds = secondsSinceEpoch(now);
std::cout << "seconds: " << seconds << std::endl;
答案 3 :(得分:0)
这很容易使用C ++ 0x chrono类,它基于Boost的时间/日期库的简化版本,但是看看Boost文档我没有看到任何特别明显的东西。事实上,我能看到的唯一方法就是调用to_tm
将其转换为标准C struct tm
,然后将这些字段相乘。这有点讨厌,但是应该有用(虽然你会小心闰秒等)。