私は、時代の秒からの秒数をptime
に変換する必要があります。私はこれを行う簡単な方法がなければならないことは確かですが、何も見つかりませんでした。ありがとう。unixタイムスタンプをboost :: posix_time :: ptime
編集:元のタイムスタンプは浮動小数点です。私はそれを変更することはできませんし、私は秒未満の精度を失いたくはありません。
私は、時代の秒からの秒数をptime
に変換する必要があります。私はこれを行う簡単な方法がなければならないことは確かですが、何も見つかりませんでした。ありがとう。unixタイムスタンプをboost :: posix_time :: ptime
編集:元のタイムスタンプは浮動小数点です。私はそれを変更することはできませんし、私は秒未満の精度を失いたくはありません。
一部が周りいじる後、私はこの思い付いた:
ptime(date(1970, 1, 1), time_duration(0, 0, 0, time_duration::ticks_per_second() * 1234567890.0987654321))
私はこれが最善の解決策であるわからないんだけど、私が必要なものをやっているようです。マイクロ秒の解像度のデフォルトレベルにコンパイルブースト日付/時間を持っているマシンの場合
from_time_t()
変換機能を使用してください。 A time_t
は、UNIXタイムスタンプ、すなわちエポックからの秒数である。
time_tは秒の小数部分を含むことはできませんが、答えは – cube
'ほとんどすべてのプラットフォームでUNIXタイムスタンプですが、C++標準ではこの動作が指定されていません。だからこの翻訳には注意してください。 –
、これを試してみてください。
double ts = 1250524800.5;
// Use floor() here if seconds are always positive.
time_t secondsSinceEpoch = floor(ts);
long microsecondsSinceSecond =
floor((ts - static_cast<double>(secondsSinceEpoch)) * 1000000);
boost::posix_time::ptime result =
boost::posix_time::from_time_t(secondsSinceEpoch);
boost::posix_time::time_duration fractionalSeconds(0, 0, 0,
microsecondsSinceSecond);
result += fractionalSeconds;
cout << "Time stamp is " << result << endl;
このため、出力「タイムスタンプは、2009 - 月 - 17 16:00です。 00.500000 "と表示されます。
最も近い丸めを得るには、 'microsecondsSinceSecond'計算に' + 0.5'を追加します。さもなければ、切り詰めのバグに悩まされます。でも、おそらく...マイクロ秒の半分の違いを気にしている人なら、おそらく最初に「ダブル」にタイムスタンプを保存しないだろうと思います。 – Tom
@Tom:ここで正しいと思いますが、このレベルの解像度に本当に関心を持つ人なら誰でも、Boostディストリビューションにナノ秒のサポートを設定し、上記のコードを適切に変更することが期待されます。 –
+1分数秒間を要する素晴らしいコードスニペット。 –
本当にダブルが必要ですか?私はintに収まると思う。 – slipbull
はい、私はダブルが必要です - それは私が変更できないインターフェースの一部です。数秒であれば分数部分をキャプチャすることはできません...そして、http://xkcd.com/607/ :-) – cube