3

由于在 C++17 中std::filesystem::file_time_type使用了一个微不足道的时钟,有没有办法file_time_type用 C++17** 检索实际的时钟类型?

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


** 在 C++20 中,file_time_type将使用std::chrono::file_clock,它具有operator<<并且可以使用 . 转换为其他时钟std::chrono::clock_cast

4

1 回答 1

5

您可以通过 轻松检索时钟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机器,你就无能为力了……至少是便携的。

于 2018-08-23T13:57:10.633 回答