Since 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 e.g. in a stream.
** In C++20, file_time_type will use std::chrono::file_clock, which has operator<< and can be casted to other clocks using std::chrono::clock_cast.
You can retrieve the clock easily enough via file_time_type::clock. But converting from one clock to another won't really be possible until the changes from C++20 are available.
The reason the clock even matters is that different clocks define a different "epoch" start date, the 0 time point for that clock. But in C++11-17, all clocks have an implementation-defined "epoch", and each clock can use a different one. The file_time_type::clock is no different. Since every implementation of every clock potentially uses a different epoch, and no clock epochs are defined relative to each other, there's no way to convert one clock's time_point into another clock's time_point. Not without implementation-specific knowledge.
C++20 changes things in exactly one way: system_clock has a well-defined epoch: it uses UNIX-time. Because there is one clock with a well-defined epoch, that clock can act as a universal intermediate clock for clock-to-clock conversions. That is, every implementation-defined clock's epoch can be converted relative to UNIX-time, and vice-versa. Hence: clock_cast.
Without that definition, and the time_conversion machinery, there's not much you can do... portably, at least.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With