如何在 C++17 中检索 std::filesystem::file_time_type 的时钟类型

How to retrieve the clock type of std::filesystem::file_time_type in C++17

自从 C++17 中的 std::filesystem::file_time_type uses a trivial clock 以来,有没有办法用 C++17 检索 file_time_type 的实际时钟类型**?

目标是将时间转换为 std::chrono::system_clock 以使用它,例如在流中。


** 在 C++20 中,file_time_type 将使用 std::chrono::file_clock, which has operator<< and can be casted to other clocks using std::chrono::clock_cast.

您可以通过 file_time_type::clock 轻松检索时钟。但是,在 C++20 的更改可用之前,从一个时钟转换为另一个时钟是不可能的。

时钟之所以重要,是因为不同的时钟定义了不同的 "epoch" 开始日期,即该时钟的 0 时间点。但在 C++11-17 中,所有时钟都有一个实现定义的 "epoch",并且每个时钟都可以使用不同的时钟。 file_time_type::clock 也不例外。由于每个时钟的每个实现都可能使用不同的纪元,并且没有相对于彼此定义时钟纪元,因此无法将一个时钟的 time_point 转换为另一个时钟的 time_point。并非没有特定于实现的知识。

C++20 完全以一种方式改变了事物:system_clock 有一个明确定义的纪元:它使用 UNIX 时间。因为有一个具有明确定义的纪元的时钟,所以该时钟可以充当时钟到时钟转换的通用中间时钟。也就是说,每个实现定义的时钟的纪元都可以相对于 UNIX 时间进行转换,反之亦然。因此:clock_cast.

如果没有这个定义和 time_conversion 机制,您将无能为力……至少在便携方面是这样。