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

我的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年代伯克利起源文件留下的文档错误吗?

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

闰秒是这样的原因:

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

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

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

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