我看了一下 cppreference.org(重点是我的):



将其与 system_clock 的定义进行比较:



实际上有可能在同一个系统中拥有两者吗?例如,如果系统时钟通过 NTP 同步,那么服务器决定它的时间,可以使用闰秒或不使用闰秒,但 C++ 库实现对此一无所知。或者,当引入闰秒时,标准是否需要数据库?

最佳答案

NTP 服务器为您提供 UTC(采用 1900 年以来的秒数格式)。当前时间,是当前时间。为了到达那里,有多少闰秒并不重要。

事情变得复杂的地方是添加闰秒。 NTP 将立即宣布这一点,并且各种操作系统在内部做各种事情来记录这一点,因为它们倾向于将时间存储为“自一个纪元以来的秒数”——Linux 和 Windows 不包括闰秒,因为这会使他们的时间戳呈现更加复杂(有多少闰秒?)并且他们无法处理。相反,他们只是在宣布的闰秒前后将时钟减慢或加速一段时间,因此与其实际记录它,他们只是调整自己的秒数,以便将该计数渲染为时间戳记稍后会显得准确。

(我不知道操作系统如何在不知道要扣除多少闰秒的情况下从 NTP 事务中重新确定其非真实但排序的秒数;欢迎编辑。)
system_clock 给你这个秒数,它(在主流平台上)直接来自操作系统(例如 time() )。
utc_clock 为您提供类似的秒数,但它是“真实的”。在这样的主流平台上,这必须是事后添加闰秒的 system_clock。这些历史数据也来自系统,确实是 some kind of database(尽管确切的来源取决于实现)。

总之,两个时钟的数据源(略有)不同,因此它们是否可以在同一系统中共存是没有问题的。但是,system_clock 可能直接来自您的操作系统,而 utc_clock 可能没有。

进一步阅读

  • NTP 和闰秒:https://www.meinbergglobal.com/english/info/leap-second.htm#os
  • 新的 utc_clock 功能及其 friend :https://howardhinnant.github.io/date/d0355r4.html
  • 关于c++ - 闰秒和 std::chrono,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56618615/

    10-12 05:24