Как получить тип часов std :: filesystem :: file_time_type в C ++ 17

поскольку std::filesystem::file_time_type использует тривиальные часы в C ++ 17 есть способ получить фактический тип часов file_time_type с C ++ 17 **?

Цель состоит в том, чтобы преобразовать время в std::chrono::system_clock использовать его, например в потоке.


** в C ++ 20, file_time_type буду использовать std::chrono::file_clock, у которого есть operator<< и может быть приведен к другим часам, используя std::chrono::clock_cast.

2

Решение

Вы можете получить часы достаточно легко с помощью file_time_type::clock, Но преобразование с одного часа на другое на самом деле будет невозможно, пока не появятся изменения из C ++ 20.

Причина, по которой часы имеют значение, состоит в том, что разные часы определяют другую дату начала «эпохи», точку времени 0 для этих часов. Но в C ++ 11-17 все часы имеют «эпоху», определяемую реализацией, и у каждого из них может быть свой. file_time_type::clock ничем не отличается. Поскольку каждая реализация каждого тактового генератора потенциально использует разные эпохи, и никакие эпохи тактовых генераторов не определены друг относительно друга, нет способа конвертировать один тактовый генератор. time_point в другие часы time_point, Не без специфических для реализации знаний.

C ++ 20 меняет вещи только одним способом: system_clock имеет четко определенную эпоху: использует UNIX-время. Поскольку существуют одни часы с четко определенной эпохой, эти часы могут выступать в качестве универсальных промежуточных часов для преобразования часов в часы. Таким образом, каждая эпоха, определяемая реализацией, может быть преобразована относительно времени UNIX и наоборот. Следовательно: clock_cast,

Без этого определения и time_conversion машины, вы ничего не можете сделать … по крайней мере, переносимо.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]