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
ミリ秒の解像度で動作しています。あなたは答えとしてあなたのコメントを投稿できますか? – tibur