我想通过网络传输 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/