将boost :: posix_time :: ptime转换为__int64的方法

时间:2009-10-15 19:50:53

标签: c++ boost

是否有人知道是否有将boost::posix_time::ptime转换为__int64值的好方法。 (我已经编译了微秒版本,而不是纳秒版本。)

我需要以某种方式执行此操作,因为我希望将生成的__int64存储在union类型中,该类型将原始数据用于高性能应用程序。某些类型的Memento功能对我来说非常有用。如果可能的话,我想避免演员阵容,但如果我需要,我会诉诸他们。

4 个答案:

答案 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,然后将这些字段相乘。这有点讨厌,但是应该有用(虽然你会小心闰秒等)。