我想通过网络将boost::posix_time::ptime
转换为boost::int64_t
。根据A way to turn boost::posix_time::ptime into an __int64,我可以很容易地定义我自己的时期,并且只将该参考时期的time_duration
转换为64位整数。但如何转换回ptime
?将int64_t转换为time_duration
#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
构造采取滴答计数的说法是私有的。我也有兴趣用其他方式简单地将这个ptime
转换成简单的数据类型。
ticks()返回的值是否可以在机器之间移植?您可能需要使用ticks_per_second()对其进行标准化。如果myEpoch在两端都是相同的,为什么你不能传输一个64位毫秒的纪元时间戳? – hplbsh 2011-01-28 15:43:09
它以毫秒分辨率工作。你可以发表你的评论作为答案吗? – tibur 2011-01-28 15:54:45