Отметка времени Unix для повышения::posix_time::ptime

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

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

3 ответа

Решение

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

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

Я не уверен, что это лучшее решение, но оно, кажется, делает то, что мне нужно.

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

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

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-Aug-17 16:00:00.500000" на моей коробке с Linux.

Другие вопросы по тегам