Guía
Timestamp Unix y segundos intercalares: qué cuenta realmente
Entiende por qué Unix time no cuenta los segundos intercalares como instantes separados y cómo afecta a conversiones y duraciones.
por Tools in a Tab · Publicado el · Revisado el
Respuesta breve
El modelo POSIX de segundos desde el epoch trata cada día como si tuviera
exactamente 86.400 segundos y no incorpora los segundos intercalares en su
fórmula. Por eso un timestamp Unix común no puede identificar de forma única
la etiqueta UTC 23:59:60; los sistemas deben resolver ese ajuste mediante su
propia política de reloj.
Qué es un segundo intercalar
UTC puede insertar un segundo adicional para mantener la escala civil cerca de la rotación terrestre. Cuando ocurre, la secuencia de etiquetas puede incluir:
23:59:59
23:59:60
00:00:00
La etiqueta 23:59:60 pertenece a UTC. No significa que todos los relojes de
ordenador expongan un número Unix adicional con una correspondencia universal.
Qué hace el modelo Unix/POSIX
La fórmula POSIX calcula días, horas, minutos y segundos desde
1970-01-01 00:00:00 UTC como si todos los días tuvieran la misma longitud.
Los segundos intercalares se ignoran para que restar dos valores proporcione
una aritmética simple de segundos nominales.
Como consecuencia, la conversión entre una etiqueta UTC situada durante un segundo intercalar y un timestamp no es biyectiva. Una API puede repetir un valor, detener el reloj brevemente o distribuir el ajuste durante un intervalo. Esas políticas operativas no forman parte del número Unix por sí solo.
Ejemplo alrededor de un día normal
Sin un segundo intercalar, dos medianoches UTC consecutivas difieren en:
24 × 60 × 60 = 86400 segundos
El conversor de timestamp
acepta segundos 00 a 59, igual que Date en ECMAScript. No acepta
23:59:60 ni afirma simular la política particular de un servidor de tiempo.
Reloj escalonado y leap smear
Algunos sistemas aplican el ajuste de golpe; otros usan un leap smear y modifican ligeramente la velocidad del reloj durante un periodo. Dos proveedores pueden adoptar ventanas distintas. Por ello, comparar marcas de reloj de fuentes diferentes alrededor del evento requiere conocer la política de cada fuente.
Un timestamp guardado sin esa información no permite reconstruir después qué estrategia utilizó el reloj.
Duración civil frente a tiempo transcurrido
Para intervalos de alta precisión, telemetría o coordinación distribuida, separa:
- la hora civil UTC que quieres mostrar;
- el reloj monotónico usado para medir duración;
- la escala y fuente de sincronización;
- la política aplicada a segundos intercalares.
El reloj del sistema puede corregirse hacia delante o hacia atrás. Medir una operación restando dos fechas civiles no ofrece las mismas garantías que un reloj monotónico.
Errores frecuentes
- Afirmar que Unix time cuenta todos los segundos físicos desde 1970.
- Introducir
:60en una API que solo admite segundos de00a59. - Mezclar timestamps de proveedores con políticas de smear diferentes.
- Usar el reloj de pared para medir duraciones críticas.
- Suponer que una diferencia de 86.400 describe cada posible día UTC histórico como escala astronómica.
La explicación de POSIX sobre segundos desde el epoch indica que los segundos intercalares se ignoran en este modelo. RFC 3339 permite la etiqueta de segundo 60 para representar un segundo intercalar UTC. Son dos capas distintas: una representación civil y un contador práctico usado por sistemas.