поскольку 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
.
Вы можете получить часы достаточно легко с помощью 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
машины, вы ничего не можете сделать … по крайней мере, переносимо.
Других решений пока нет …