c++ - sirve - time null cplusplus
¿Por qué tm_sec varía de 0-60 en vez de 0-59 en time.h? (2)
Mi time.h
tiene la siguiente definición de 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] */
...
}
Me di cuenta de que documentan que tm_sec
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 que quedó de este archivo originado en Berkley de los años 90?
¿O hay algo más sutil que desconozco?
La página man para ctime
explica que esto se trata de 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.
Los segundos intercalares son la razón de esto:
Un segundo intercalar es un ajuste de más o menos un segundo a la escala de tiempo del Tiempo Universal Coordinado (UTC) que lo mantiene cerca del tiempo solar.
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.