Отметка времени 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.