为什么tm_sec在time.h中的范围是0-60而不是0-59?

Fra*_*ger 25 c c++ time

time.h的定义如下tm:

struct tm {
    int tm_sec;     /* seconds after the minute [0-60] */
    int tm_min;     /* minutes after the hour [0-59] */
    int tm_hour;    /* hours since midnight [0-23] */
    ...
}
Run Code Online (Sandbox Code Playgroud)

我只是注意到它们的文档tm_sec介于0-60之间.我一直认为它的范围从0到59就像tm_min.我当然没见过时钟阅读时间10:37:60 ......

你认为这只是这个90年代伯克利起源文件留下的文档错误吗?

或者是否有一些我不知道的更微妙的事情?

Kyl*_*nin 36

闰秒是这样的原因:

闰秒是对协调世界时(UTC)时间刻度的正负1秒调整,使其接近平均太阳时.

当在UTC时间23:59:60添加正闰秒时,它将后续UTC日(在00:00:00 UTC)的开始延迟一秒,从而有效地减慢了UTC时钟.

  • +1:击败我23秒.你的猜测是正确的. (3认同)
  • 有趣的是,C90标准说:"tm_sec的范围[0,61]允许多达两个闰秒." - 那十年发生了什么?是否不再需要第二次闰秒? (2认同)
  • @michael"UTC的正式定义不允许双闰秒,因此所有提到的双闰秒都已被删除,并且范围缩短了之前版本POSIX中的前[0,61]秒." (2认同)
  • 涉及C90标准的人听说“一年中最多可以有两个leap秒”,并将其误解为意味着它们可以同时发生。 (2认同)

sth*_*sth 8

手册页ctime解释了这是关于闰秒:

tm_sec:分钟后的秒数,通常在0到59的范围内,但最多可以为60,以允许闰秒.