How to retrieve the clock type of std::filesystem::file_time_type in C++17
Поскольку std::filesystem::file_time_type
uses a trivial clock in C++17, is there a way to retrieve the actual clock type of file_time_type
with C++17**?
The goal is to convert the time to std::chrono::system_clock
to use it eg in a stream.
** In C++20, file_time_type
буду использовать std::chrono::file_clock
, у которого есть operator<<
and can be casted to other clocks using std::chrono::clock_cast
,
1 ответ
Вы можете получить часы достаточно легко с помощью 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
машины, вы ничего не можете сделать... по крайней мере, переносимо.