13

エポックからの秒数で double を に変換する必要がありptimeます。これを行う簡単な方法があるに違いないと確信していますが、何も見つかりませんでした。ありがとう。

編集:元のタイムスタンプは浮動小数点です。私はそれを変更することはできませんし、1 秒未満の精度を失いたくありません。

4

3 に答える 3

8

ブースト日時がマイクロ秒の解像度のデフォルトレベルにコンパイルされているマシンの場合は、次のことを試してください。

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;

これの出力は、私のLinuxボックスでは「タイムスタンプは2009年8月17日16:00:00.500000」です。

于 2010-02-10T00:28:43.273 に答える
8

from_time_t()変換機能を使用してください。Atime_tはUNIXタイムスタンプ、つまりエポックからの秒数です。

于 2009-07-22T19:19:13.910 に答える
7

いくつかいじった後、私はこれを思いつきました:

ptime(date(1970, 1, 1), time_duration(0, 0, 0, time_duration::ticks_per_second() * 1234567890.0987654321))

これが最善の解決策かどうかはわかりませんが、必要なことはできるようです。

于 2009-07-22T20:37:34.593 に答える