【问题标题】:How to retrieve the clock type of std::filesystem::file_time_type in C++17如何在 C++17 中检索 std::filesystem::file_time_type 的时钟类型
【发布时间】:2018-08-23 13:09:17
【问题描述】:

由于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 转换为其他时钟。

【问题讨论】:

  • file_time_type::clock?

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


【解决方案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 机制,您将无能为力……至少是便携的。

【讨论】:

    猜你喜欢
    • 2018-12-18
    • 1970-01-01
    • 2022-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多