Unix 纪元时间在闰年涂抹时钟上的表现如何?

Nic*_*mid 4 time gnu date unix-timestamp leap-second

考虑一台机器,其时间在闰秒期间被中午到中午的线性涂抹所涂抹。

我想知道系统时钟如何在涂抹期间提供准确的纪元时间。

例子:

  • 闰秒定于2016年12月31日。

  • 在机器上,12 月 31 日 11:59:00 的 Unix 时间戳是1483185540

  • 中午开始涂抹,这意味着下午 1:30 系统的本地时钟已经落后 TAI 和 UTC 几微秒。Epoch 时间戳应该是1483191000(正好 1 小时 31 分钟后),这对于 TAI/UTC 来说不再准确,因为 Epoch 不考虑闰秒
  • UTC 中午 12 点增加一秒:晚上 11:59:60,本地污迹时钟应正常继续
  • 直到 1 月 1 日中午,全球 UTC 和本地 UTC 再次同步,本地 Epoch 时钟现在比全球 Epoch/TAI 落后一整秒

如何解决这个不准确的问题?一旦系统知道发生了闰秒,本地纪元时间是否会跳过一秒?或者说这个问题是如何处理的?
它是否取决于用于计算时间的时钟的实现?如果是这样,GNU 的 coreutils 如何date处理这个问题?

How*_*ant 7

不准确问题尚未解决。Unix 时间保留自 1970-01-01 00:00:00 UTC 以来的秒数,不包括插入的闰秒。这样做的好处是可以轻松地将秒数转换为{year, month, day, hour, minute, second}形式。

它存在的问题是,跨越闰秒插入的两个 Unix 时间时间点相减将导致持续时间比实际少一秒。

  • 有些人将这种抹黑解读为时代的转变。我不。据我所知,没有 API 不会将 0 秒的 Unix 时间格式化为 1970-01-01 00:00:00 UTC。如果存在纪元转换,格式化程序必须考虑到这一点,并将 0 格式化为 1970-01-01 00:00:27 UTC。 (2认同)
  • 计算机系统具有单调时钟,可用于避免闰秒拖尾的计时误差。通常,这些单调时钟与民用日历没有任何关系。它们很像手持秒表:适合计时,但不适合计时。 (2认同)