Преобразовать метку времени с эталонным временем в форматированное время - PullRequest
0 голосов
/ 27 сентября 2019

Я хочу преобразовать метку времени в форматированное время.Отметка времени представляет собой двойное значение (например, отметка времени = 41274.043) с контрольной датой от 1.1.1900 00:00 и должно возвращать что-то вроде 02.01.2017 01: 01.

Я не смог найти ничего о том, как установитьэталонное время правильно.Любой совет?Чтобы настроить дату, я бы использовал strftime (), STL необходим ...

BR

jtotheakob

1 Ответ

0 голосов
/ 28 сентября 2019

Используя бесплатную библиотеку Говарда Хиннанта с открытым исходным кодом, содержащую только заголовки это можно сделать так:

#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
...