c++ - 将 int64_t 转换为 time_duration

标签 c++ boost time

我想通过网络传输 boost::posix_time::ptime 作为 boost::int64_t。根据A way to turn boost::posix_time::ptime into an __int64 ,我可以很容易地定义我自己的 epoch 并且仅将 time_duration 从该引用 epoch 传输为 64 位整数。但是如何转换回 ptime 呢?

#include <iostream>
#include <cassert>
#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/date_time/gregorian/greg_month.hpp>

using namespace std;

using boost::posix_time::ptime;
using boost::posix_time::time_duration;
using boost::gregorian::date;

int main(int argc, char ** argv){
    ptime t = boost::posix_time::microsec_clock::local_time();

    // convert to int64_t
    ptime myEpoch(date(1970,boost::gregorian::Jan,1));
    time_duration myTimeFromEpoch = t - myEpoch;
    boost::int64_t myTimeAsInt = myTimeFromEpoch.ticks();

    // convert back to ptime
    ptime test = myEpoch + time_duration(myTimeAsInt);

    assert(test == t);
    return 0;
}

这是行不通的,因为 time_duration 构造函数将滴答计数作为参数是私有(private)的。我也对通过简单数据类型简单地传输 ptime 的任何其他方式感兴趣。

最佳答案

毫秒分辨率的工作解决方案:

int main(int argc, char ** argv){
    ptime t = boost::posix_time::microsec_clock::local_time();

    // convert to int64_t
    ptime myEpoch(date(1970,boost::gregorian::Jan,1));
    time_duration myTimeFromEpoch = t - myEpoch;
    boost::int64_t myTimeAsInt = myTimeFromEpoch.total_milliseconds();

    // convert back to ptime
    ptime test = myEpoch + boost::posix_time::milliseconds(myTimeAsInt);

    cout << test << endl;
    cout << t << endl;

    time_duration diff = test - t;

    assert(diff.total_milliseconds()==0);
    return 0;
}

谢谢 12a6。

关于c++ - 将 int64_t 转换为 time_duration,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4829437/

相关文章:

java - 将时间转换为毫秒

r - 使用 R 绘制润滑周期

c++ - 从arduino中串行接收的数据解析整数

c++ - 尝试使用 boost::spirit 解析字符串中的一个整数时出现编译器错误

时间轴上的日期模周

c++ - 包含 Boost 库时 Android Studio 链接器命令失败

C++:尝试遍历 boost::unordered_map<string,int> 时,operator< 不匹配

c++ - std::vector<double> 销毁抛出 sigabrt

c++ - 生成前缀位掩码

c++ - 如何使用 _GLIBCXX_DEBUG 构建 Boost 版本?