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

时间:2009-04-19 17:41:29

标签: 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] */
    ...
}

我刚注意到他们将tm_sec记录在 0-60 之间。我一直认为它的范围是0-59,就像tm_min一样。我当然没见过时钟上午10:37:60 ......

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

还是有一些我不知道的更微妙的事情?

2 个答案:

答案 0 :(得分:36)

Leap seconds就是这样的原因:

  

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

     

如果在UTC时间23:59:60添加正闰秒,它会将下一个UTC日(在00:00:00 UTC)的开始延迟一秒,从而有效地减慢UTC时钟。

答案 1 :(得分:8)

ctime的手册页解释说这是闰秒:

  

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