Hora Unix, hora POSIX, epoch timestamp: la respuesta corta
En el código del día a día, los tres términos significan el mismo número: segundos desde 1970-01-01 00:00:00 UTC. La distinción está en su origen. "Hora Unix" es una convención heredada de los inicios de Unix y de la biblioteca C. "Hora POSIX" es ese mismo recuento plasmado en un estándar formal (IEEE Std 1003.1), que fija cada día en exactamente 86 400 segundos. "Epoch timestamp" es el más genérico de los tres — una "epoch" es simplemente un instante de referencia fijo, y aunque casi siempre se refiere a la epoch Unix de 1970, otros sistemas (NTP, GPS, Windows) cuentan desde epochs diferentes. La tabla siguiente asocia cada término con su estándar y con cómo trata los segundos intercalares.
| Término | Cuenta | Definido por | Segundos intercalares | Notas |
|---|---|---|---|---|
| Hora Unix | Segundos desde 1970-01-01 00:00:00 UTC | Convención (Unix / biblioteca C) | Ignorados | El nombre cotidiano entre desarrolladores |
| Hora POSIX | Segundos desde la epoch, por una fórmula fija | IEEE Std 1003.1 §4.16 | Ignorados — cada día tiene exactamente 86 400 s | La versión formalmente especificada de la hora Unix |
| Epoch timestamp | Un recuento desde una epoch fija (normalmente la epoch Unix) | Término genérico — la epoch varía | Depende de la epoch/del sistema | "Epoch" es el instante de referencia, no siempre 1970 |
| Epoch en milisegundos | Milisegundos desde 1970-01-01 UTC | Misma epoch, unidad más fina | Ignorados | 13 dígitos hoy; por defecto en JavaScript y Java |
¿Qué es un epoch timestamp?
Un epoch timestamp es un recuento numérico medido desde un momento de referencia fijo llamado epoch. En el uso cotidiano de los desarrolladores, epoch timestamp suele significar marca de tiempo Unix: el número de segundos desde el 1 de enero de 1970 a las 00:00:00 UTC. Un valor de 0 significa la epoch Unix exacta. Los valores positivos son posteriores a 1970; los negativos, anteriores. La palabra que hace el trabajo es "epoch" — nombra el instante de inicio, y todo lo demás es solo contar a partir de ahí. Para la definición sencilla y el significado de la marca de tiempo cero, consulta La hora epoch explicada; este artículo se centra en cómo se relacionan los tres nombres rivales.
Hora Unix vs hora POSIX: qué dice el estándar
La hora Unix y la hora POSIX se refieren al mismo recuento, pero solo la hora POSIX está formalmente especificada. IEEE Std 1003.1 — el estándar POSIX — define "Seconds Since the Epoch" con una fórmula explícita que convierte una fecha de calendario UTC en un único entero. La propiedad definitoria de esa fórmula es que trata cada día como exactamente 86 400 segundos (60 × 60 × 24). Es una simplificación deliberada: ignora los segundos intercalares, cambiando precisión astronómica por un valor trivial de calcular, ordenar y almacenar. "Hora Unix" es el nombre coloquial de la misma magnitud, anterior al estándar; "hora POSIX" es lo que citas cuando necesitas la definición precisa.
- Fórmula POSIX: una fecha UTC se proyecta en un entero, con cada día fijado en 86 400 segundos
- Consecuencia: una marca de tiempo Unix/POSIX sigue al UTC pero nunca cuenta los segundos intercalares insertados
- time_t es el tipo C que lo contiene — históricamente con signo de 32 bits, ahora normalmente con signo de 64 bits
- Mismo instante → mismo valor en todo sistema conforme, sin importar la zona horaria o la configuración regional
¿Difieren alguna vez de verdad la hora Unix y la hora POSIX?
Para casi todo el software, no — son el mismo número y puedes usar los términos indistintamente. Las diferencias solo afloran en la frontera entre el tiempo civil y la física. Como ambas ignoran los segundos intercalares, una marca de tiempo Unix/POSIX no es un recuento real de segundos SI transcurridos desde 1970: no incluye los 27 segundos intercalares insertados en el UTC desde 1972. (El TAI, una escala de tiempo atómica continua, va exactamente 37 segundos por delante del UTC desde 2017.) Alrededor de un segundo intercalar, un reloj POSIX repite o salta un segundo para que el día siga teniendo exactamente 86 400 segundos. Las grandes plataformas evitan esa discontinuidad con el leap smearing — repartiendo el segundo adicional a lo largo de todo un día para que ninguna marca de tiempo sea ambigua. Si haces cronometraje de alta precisión, programas a través de un segundo intercalar o comparas con GPS o TAI, ahí es donde "Unix" y "POSIX" dejan de ser académicos y el modelo de segundos intercalares importa.
Otras epochs que encontrarás
"Epoch timestamp" solo significa "marca de tiempo Unix" por convención. Una epoch es simplemente el instante a partir del cual cuenta un reloj, y varios sistemas muy usados cuentan desde otra distinta. Cuando un valor no se decodifica en una fecha plausible de los años 2020 con la epoch Unix, a menudo la razón es una epoch diferente.
- Epoch Unix/POSIX — 1970-01-01 UTC; segundos (o ms/µs). El valor por defecto casi en todas partes
- Epoch NTP — 1900-01-01 UTC; usada por el Network Time Protocol (RFC 5905)
- Epoch GPS — 1980-01-06; la hora GPS no tiene segundos intercalares, así que ha derivado por delante del UTC (18 segundos en 2026)
- Windows FILETIME — 1601-01-01 UTC, contado en intervalos de 100 nanosegundos
- JavaScript / Java — la epoch Unix pero en milisegundos, por eso esos valores tienen 13 dígitos
Por qué la marca de tiempo desde 1970 se volvió estándar
La epoch Unix era práctica para los primeros sistemas Unix y se convirtió en convención a medida que las ideas de Unix se extendieron a las bibliotecas C, Linux, las bases de datos, los servidores web y los lenguajes de programación. Una sola marca de tiempo numérica es más fácil de ordenar, comparar, transmitir y almacenar que una cadena de fecha localizada. Una vez que la biblioteca C y luego POSIX estandarizaron el recuento, 1970 quedó fijado en todo el ecosistema — por eso un valor generado en una plataforma se decodifica de forma idéntica en cualquier otra.
Ejemplos de epoch timestamp
Unos cuantos valores conocidos hacen la definición más fácil de recordar.
- 0 = 1970-01-01 00:00:00 UTC
- 1 = 1970-01-01 00:00:01 UTC
- 86400 = 1970-01-02 00:00:00 UTC
- 1700000000 = 2023-11-14 22:13:20 UTC
- 1767225600 = 2026-01-01 00:00:00 UTC
Artículos relacionados
FAQ
- ¿La hora epoch es lo mismo que la hora Unix?
- En el uso común de los desarrolladores, sí. La hora epoch suele significar hora Unix: los segundos transcurridos desde 1970-01-01 00:00:00 UTC.
- ¿Cuál es la definición de la hora Unix?
- La hora Unix se define como los segundos desde 1970-01-01 00:00:00 UTC, sin contar los segundos intercalares.
- ¿Qué es la hora POSIX?
- La hora POSIX es la versión formalmente especificada de la hora Unix. IEEE Std 1003.1 ("Seconds Since the Epoch") ofrece una fórmula exacta que cuenta los segundos desde 1970-01-01 00:00:00 UTC y trata cada día como exactamente 86 400 segundos.
- ¿Por qué la hora POSIX ignora los segundos intercalares?
- Por diseño. La fórmula POSIX fija un día en exactamente 86 400 segundos para que el valor sea simple de calcular y almacenar. Como resultado, una marca de tiempo Unix/POSIX sigue al UTC pero no representa los segundos intercalares que se le insertan.
- ¿Una marca de tiempo POSIX tiene en cuenta la zona horaria?
- No. Una marca de tiempo POSIX representa un instante. Las zonas horarias solo se aplican al formatear ese instante como fecha legible.
- ¿Las epoch timestamps son iguales en Windows, Linux y macOS?
- La epoch Unix (1970-01-01 00:00:00 UTC) es idéntica en plataformas y lenguajes modernos, así que el mismo instante produce la misma marca de tiempo Unix en todas partes. Windows usa internamente su propia epoch FILETIME (1601), pero las marcas de tiempo Unix y POSIX estándar usan 1970.