2009-04-19 13 views
25

Mi time.h tiene la siguiente definición de tm:¿Por qué tm_sec varía de 0-60 en vez de 0-59 en time.h?

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

simplemente me di cuenta que documentan tm_sec que oscila entre 0-60 inclusive. Siempre he supuesto que varió de 0 a 59 al igual que tm_min. Ciertamente nunca he visto un reloj leer 10:37:60 ...

¿Crees que esto es solo un error de documentación de este archivo originado en Berkley de los años 90?

¿O hay algo más sutil que desconozco?

Respuesta

36

Leap seconds son la razón de esto:

Un segundo salto es un ajuste más o menos de un segundo a la escala de tiempo Tiempo Universal Coordinado (UTC) que lo mantiene cerca del tiempo solar medio.

Cuando se agrega un segundo intercalar positivo a las 23:59:60 UTC, retrasa el inicio del siguiente día UTC (a las 00:00:00 UTC) por un segundo, lo que efectivamente desacelera el reloj UTC.

+3

+1: me gana por 23 segundos. Y tu conjetura es correcta. – dwc

+0

@dwc, ¿te importa editar la respuesta con alguna evidencia? –

+0

http://www.opengroup.org/onlinepubs/009695399/basedefs/time.h.html y muchos otros lugares hablan sobre esto. – dwc

8

La página del manual para ctime explica que se trata de los segundos intercalares:

tm_sec: El número de segundos después del minuto, normalmente en el rango de 0 a 59, pero puede ser de hasta 60 para permitir segundos intercalares.

Cuestiones relacionadas