【发布时间】:2019-12-08 05:22:14
【问题描述】:
我知道steady_clock 并且它是唯一指定为单调的时钟。而且我知道system_clock 由于夏令时和闰年可以向前或向后跳跃。但是count() 不是给你自 Unix 纪元以来系统时钟的滴答数,这是一个一直在增加的数字,无论整数的滴答数如何被解析为“日历日期 + 挂钟”解释? 即即使“日历日期+挂钟”在三月的某一天从凌晨2点跳到凌晨3点,刻度的整数计数不是只增加了一个刻度吗?
简而言之,难道std::chrono::system_clock.now().time_since_epoch().count() 的值在短期内会单调增加(当然,除非系统时钟更新是一个非常真实的事件),即使它所指的日期+时间跳来跳去?
编辑
正如@SergeyA 所指出的,如果系统时钟发生变化,那么值当然会跳来跳去。但我认为由于夏令时而导致的挂钟时间变化不是 NTP 更新事件或用户手动更改。如果它有助于澄清问题,我对可能跨越 DST 边界的一两个小时的正常运行时间感兴趣,而不是时钟可能漂移的几周或几个月的正常运行时间。
【问题讨论】:
-
如果时间从凌晨 2 点到凌晨 3 点,计数是秒,它怎么可能只增加一?它是从凌晨 2 点或 3 点开始的秒数。
-
但是如果date+time的底层表示是整数秒,那么从1970-01-01 00:00:00到2019-03-10 03:00的秒数: 00 只是 1 + n,其中 n 是从 1970-01-01 00:00:00 到 2019-03-19 01:59:59 的秒数。
-
不是重复的问题,但它也回答了这个问题:stackoverflow.com/questions/27365236
-
计数不会因为夏令时或闰年而改变。它会发生变化,因为没有时钟能保持完美的时间,如果你想让你的时钟相对于 UTC 保持准确,你必须偶尔调整它。
标签: c++ time clock epoch chrono