Unix timestamp для повышения:: posix_time:: ptime

Мне нужно преобразовать double с количеством секунд с эпохи в ptime. Я уверен, что должен быть простой способ сделать это, но я ничего не мог найти. Спасибо.

Изменить: Исходная временная метка - это плавающая запятая. Я не могу изменить его, и я не хочу потерять второстепенную точность.

Ответ 1

после некоторого возиться с этим я придумал это:

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

Я не уверен, что это лучшее решение, но, похоже, он делает то, что мне нужно.

Ответ 2

Используйте функцию преобразования from_time_t(). A time_t - это отметка времени UNIX, то есть количество секунд с момента.

Ответ 3

Для машины с ускоренной датой/временем, скомпилированной до уровня разрешения микросекунды по умолчанию, попробуйте следующее:

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" в моем linux-окне.