Создайте новый time_point
, содержащий текущую эпоху:
auto epoch = std::chrono::time_point<std::chrono::system_clock>();
Добавьте конвертированную длительность к этому time_point
:
auto oldNow = epoch + std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::duration<double>(origin_time));
Преобразуйте его в std::time_t
:
auto t_c = std::chrono::system_clock::to_time_t(oldNow);
Распечатайте его, используя средства форматирования для time_t
:
std::cout << std::put_time(std::localtime(&t_c), "%F %T");
Пример вывода:
2020-01-10 18:45:48
Вы заметите, что отсутствует часть .ffffffff . Это потому, что std::put_time
не имеет опции форматирования. Вы можете легко вычислить значение самостоятельно и поместить его в конец строки, если это важно для вас.
Также обратите внимание, что это гораздо лучше сделать с помощью C ++ 20 chrono
или библиотеки Date Говарда ( что в основном то же самое, за исключением нескольких битов здесь и там), как отмечено в комментариях самого человека. Для обзора этого вы можете быть заинтересованы в этот ответ .