3

考虑一台机器,它的时间在闰秒期间出现了正午到正午的线性拖尾。

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

例子:

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

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

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

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

4

1 回答 1

4

不准确没有解决。自 1970-01-01 00:00:00 UTC 以来,Unix 时间仍然是秒计数,不包括插入的闰秒。这样做的好处是使秒数易于转换为{year, month, day, hour, minute, second}形式。

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

于 2019-07-02T18:43:52.057 回答