Длительность хронографа в строку времени - PullRequest
0 голосов
/ 10 января 2020

У меня есть несколько строк кода, которые берут системные часы на моем Windows компьютере и преобразуют их в двойные.

std::chrono::time_point<std::chrono::system_clock> currentNow = 
std::chrono::system_clock::now();
auto duration = currentNow.time_since_epoch();
double millis = static_cast<double>(std::chrono::duration_cast<std::chrono::milliseconds>(duration).count());
double origin_time = millis / 1000;

Я хотел бы позже обратить это и преобразовать двойные в строка в формате ГГГГ-мм-дд ЧЧ: ММ: СС.ffffffff

Первый шаг, который у меня есть сейчас, - это взять значение типа double и передать его в качестве параметра chrono :: продолжительность.

auto rep = std::chrono::duration<double>(origin_time);

Как бы я go об использовании библиотеки chrono для получения указанной выше строки, спасибо!

1 Ответ

3 голосов
/ 10 января 2020

Создайте новый 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 Говарда ( что в основном то же самое, за исключением нескольких битов здесь и там), как отмечено в комментариях самого человека. Для обзора этого вы можете быть заинтересованы в этот ответ .

...