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

Другие вопросы по тегам