Unix Epoch时间如何在clock污的时钟上运行?

时间:2019-07-02 18:23:33

标签: date time gnu unix-timestamp leap-second

考虑一台机器,它的时间在a秒之间被涂抹,并且具有从午到午的线性涂抹。

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

示例:

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

  • 在计算机上,12月31日11:59:00的Unix时间戳为1483185540

  • 中午开始拖尾,这意味着系统在1:30 pm的本地时钟已经比TAI和UTC落后几微秒。 Epoch时间戳记应为1483191000(恰好是1小时31分钟后),由于Epoch不遵守leap秒,因此它不再适用于TAI / UTC
  • UTC下午12点增加了一个额外的秒:11:59:60 pm,本地涂抹时钟应正常继续
  • 直到1月1日中午,全球UTC和本地UTC再次同步,本地Epoch时钟现在比全球Epoch / TAI落后整整一秒

如何解决此错误?一旦系统知道发生了leap秒,当地的大纪元时间是否会跳过一秒?还是该问题如何处理?
它是否取决于用于计算时间的时钟的实现?如果是这样,GNU的coreutils date如何处理呢?

1 个答案:

答案 0 :(得分:3)

不解决的错误。从1970-01-01 00:00:00 UTC开始,Unix时间仍然是秒数,不包括插入的count秒。这样做的好处是使秒数易于转换为{year, month, day, hour, minute, second}形式。

存在一个问题,即跨越跨越leap秒插入的两个Unix时间时间点相减会导致持续时间比实际时间短一秒。