Cómo convertir marcas de tiempo Unix

· 5 min de lectura

Las marcas de tiempo Unix son la forma en que las computadoras almacenan y comunican el tiempo: un solo número que representa los segundos desde el 1 de enero de 1970. Aparecen en respuestas API, registros de bases de datos, archivos de log y tokens JWT. Cuando necesitas saber qué fecha es realmente 1711824000, necesitas un convertidor. Un convertidor basado en navegador maneja la matemática al instante y te permite ir en ambas direcciones (marca de tiempo a fecha, fecha a marca de tiempo).

Cómo se ve una marca de tiempo Unix

Marca de tiempoTipoLegible por humano
0Segundos1 ene 1970 00:00:00 UTC
1000000000Segundos9 sep 2001 01:46:40 UTC
1234567890Segundos13 feb 2009 23:31:30 UTC
1711824000Segundos31 mar 2024 00:00:00 UTC
1711824000000Milisegundos31 mar 2024 00:00:00 UTC
2147483647Segundos19 ene 2038 03:14:07 UTC (máximo 32-bit con signo)

La diferencia entre segundos y milisegundos son tres ceros adicionales. Un número de 10 dígitos está en segundos; 13 dígitos es milisegundos. A partir de 2024, todas las marcas de tiempo Unix basadas en segundos son de 10 dígitos y permanecerán así hasta noviembre de 2286.

Cómo convertir marcas de tiempo

  1. Introduce una marca de tiempo o fecha: pega una marca de tiempo Unix para convertirla a una fecha legible, o introduce una fecha para obtener la marca de tiempo.
  2. Verifica el formato: el convertidor detecta automáticamente segundos vs milisegundos según la longitud del número.
  3. Lee el resultado: ve la fecha en tu zona horaria local, UTC y formato ISO 8601.

Una breve historia del tiempo Unix

El tiempo Unix se definió por primera vez en el Manual del Programador Unix publicado en Bell Labs en noviembre de 1971. La época original era el 1 de enero de 1971, pero se cambió al 1 de enero de 1970 poco después y se estandarizó en POSIX.1 (1988).

La elección de 1970 fue arbitraria pero práctica: Unix se desarrolló en 1969-1971, y comenzar el conteo cerca del nacimiento del SO parecía razonable. Un entero con signo de 32 bits contando segundos desde 1970 dio un rango desde diciembre de 1901 hasta enero de 2038, lo que los diseñadores pensaron que sería suficiente.

No lo es. El "problema del año 2038" (también llamado Y2K38) es el momento en que las marcas de tiempo Unix con signo de 32 bits se desbordan: 2147483647 segundos después de la época, el siguiente tic se voltea a un número negativo que los sistemas interpretan como diciembre de 1901. La mayoría de los sistemas modernos migraron a marcas de tiempo enteras de 64 bits en los años 2000 y 2010, pero algunos dispositivos integrados, bases de datos más antiguas y formatos de archivos heredados todavía usan tiempo de 32 bits y necesitarán parches antes de 2038.

El tiempo Unix es ahora el estándar de facto para representar el tiempo en sistemas informáticos. APIs JSON, marcas de tiempo de filas de base de datos, expiraciones JWT, tiempos de bloque blockchain, lecturas de sensores IoT: casi todos usan la época Unix directa o indirectamente.

Segundos, milisegundos, microsegundos, nanosegundos

Diferentes sistemas usan diferentes precisiones:

Una marca de tiempo de 19 dígitos puede confundir a convertidores que esperan milisegundos; verifica la documentación de origen cuando veas números anómalos.

Dónde encuentras marcas de tiempo

Marcas de tiempo en código

Conversión rápida en lenguajes comunes:

JavaScript:

new Date(1711824000 * 1000)            // Desde segundos (multiplicar por 1000)
new Date(1711824000000)                // Desde milisegundos
Math.floor(Date.now() / 1000)          // Tiempo actual en segundos
Date.now()                             // Tiempo actual en milisegundos

Python:

from datetime import datetime, timezone
datetime.fromtimestamp(1711824000, tz=timezone.utc)
datetime.now(timezone.utc).timestamp()  # Tiempo actual en segundos (float)

Bash:

date -u -d @1711824000                 # GNU date (Linux)
date -u -r 1711824000                  # BSD date (macOS)
date +%s                               # Tiempo actual en segundos

SQL (PostgreSQL):

SELECT TO_TIMESTAMP(1711824000);       -- Convertir epoch a timestamp
SELECT EXTRACT(EPOCH FROM NOW());      -- Epoch actual

Go:

time.Unix(1711824000, 0)               // Desde segundos
time.Now().Unix()                      // Tiempo actual en segundos

Manejo de zonas horarias

Aquí es donde se esconden la mayoría de los errores de marca de tiempo:

Al enviar marcas de tiempo en APIs, usa siempre segundos UTC. Al mostrarlas a los usuarios, conviértelas a su zona horaria local. El convertidor maneja ambas direcciones.

Errores comunes

Consejos

Privacidad

El convertidor de marca de tiempo Unix se ejecuta completamente en tu navegador. Las marcas de tiempo y fechas que introduces nunca abandonan tu dispositivo. Esto importa porque las marcas de tiempo pueden ser sensibles: pueden ser de archivos de log que revelan tiempos de infraestructura interna, tokens JWT con información de usuario/sesión incrustada, depuración interna de API que no debería compartirse con terceros. Los convertidores de marca de tiempo en la nube pueden registrar entradas con fines de "mejora"; un convertidor solo en navegador tiene cero exposición.

La conversión basada en navegador también funciona sin conexión una vez cargada la página, y es lo suficientemente rápida para que puedas soltar una marca de tiempo en el campo y ver la fecha en el mismo momento.

Preguntas frecuentes

¿Qué es el tiempo Unix epoch?

El tiempo Unix epoch (también llamado tiempo POSIX o marca de tiempo Unix) es el número de segundos transcurridos desde el 1 de enero de 1970 a las 00:00:00 UTC. Es la forma estándar en que los ordenadores representan el tiempo internamente.

¿Cuál es la diferencia entre marcas de tiempo en segundos y en milisegundos?

Las marcas de tiempo Unix en segundos tienen 10 cifras (p. ej. 1711824000). Las marcas de tiempo en milisegundos tienen 13 cifras (p. ej. 1711824000000). JavaScript usa milisegundos, la mayoría de las API y bases usan segundos. El convertidor detecta automáticamente según la longitud.

¿Por qué mi hora convertida está desplazada varias horas?

Las marcas de tiempo siempre están en UTC. El convertidor muestra tanto UTC como tu hora local. Si el resultado no coincide con lo que esperabas, probablemente estás comparando una salida UTC con una hora local, o al revés.

¿Qué ocurre en 2038?

Los sistemas que guardan las marcas de tiempo Unix en entero con signo de 32 bits desbordarán el 19 de enero de 2038. La mayoría de los sistemas modernos usan enteros de 64 bits, lo que extiende el rango mucho más allá de cualquier preocupación práctica.