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

时间:2018-08-23 13:09:17

标签: c++ c++17 chrono std-filesystem

由于std::filesystem::file_time_type在C ++ 17中使用了trivial clock,是否可以用C ++ 17 **来检索file_time_type的实际时钟类型?

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


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

1 个答案:

答案 0 :(得分:3)

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

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

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

没有这个定义和time_conversion机制,您无能为力……至少是可移植的。