Используя бесплатную библиотеку Говарда Хиннанта с открытым исходным кодом, содержащую только заголовки это можно сделать так:
#include "date/date.h"
#include <iostream>
std::chrono::system_clock::time_point
to_chrono_time_point(double d)
{
using namespace std::chrono;
using namespace date;
using ddays = duration<double, days::period>;
return sys_days{January/1/1900} + round<system_clock::duration>(ddays{d});
}
int
main()
{
std::cout << date::format("%d.%m.%Y %H:%M\n", to_chrono_time_point(41274.043));
}
Это просто преобразует double
в chrono::duration
спредставление double
и период days
, затем округляет это duration
в system_clock::duration
и, наконец, добавляет эту продолжительность к 1.1.1900 00:00.В результате получается std::chrono::system_clock::time_point
.
. std::chrono::system_clock::time_point
можно отформатировать с помощью date::format
из той же библиотеки, как показано.Выход этой программы:
02.01.2013 01:01