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 :60 en una API que solo admite segundos de 00 a 59.
  • 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.