Tôi muốn chuyển một số boost::posix_time::ptime
qua mạng dưới dạng boost::int64_t
. Theo số A way to turn boost::posix_time::ptime into an __int64, tôi có thể dễ dàng xác định epoch riêng của mình và chỉ chuyển số time_duration
từ tham chiếu epoch đó dưới dạng số nguyên 64 bit. Nhưng làm cách nào để chuyển đổi lại thành ptime
?Chuyển đổi int64_t thành 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;
}
Điều này không hoạt động vì công cụ xây dựng 01 số đếm là đối số riêng tư. Tôi cũng quan tâm đến bất kỳ cách nào khác để chỉ đơn giản chuyển rằng ptime
qua các loại dữ liệu đơn giản.
Giá trị trả về bằng dấu() có thể di chuyển giữa các máy không? Bạn có thể cần phải sử dụng ticks_per_second() để bình thường hóa nó. Nếu myEpoch giống nhau ở cả hai đầu, tại sao bạn không thể chuyển dấu thời gian epoch giây 64 bit? – hplbsh
Nó hoạt động với độ phân giải mili giây. Bạn có thể đăng bình luận của mình làm câu trả lời không? – tibur