2009-04-19 77 views
25

time.htm定义如下:为什么tm_sec在time.h中的范围是0-60而不是0-59?

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年代Berkley发起的文件遗留下来的文档错误?

还是有什么更微妙的事情发生,我不知道?

回答

36

Leap seconds是这样做的原因:

闰秒是加上或减去一个,第二个调整为协调世界时(UTC)时间尺度,保持它接近的意思是太阳时。

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

+3

+1:打我23秒。你的猜测是正确的。 – dwc 2009-04-19 17:44:13

8

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

tm_sec:秒数分钟后,正常范围为0至 59,但可高达60以允许闰秒。