Conversor de marca de tiempo Unix
Convierte una marca de tiempo Unix a una fecha legible en cualquier zona horaria, y una fecha de vuelta a epoch.
Qué es una marca de tiempo Unix
Una marca de tiempo Unix —también llamada tiempo epoch o tiempo POSIX— es un único número que cuenta cuántos segundos han pasado desde las 00:00:00 UTC del 1 de enero de 1970, un instante conocido como epoch de Unix. Al ser un solo entero, sin zona horaria, sin calendario y sin formato, es el formato al que recurren los ordenadores siempre que hay que almacenar, ordenar, comparar o enviar por red un momento en el tiempo. Es lo que hay detrás de la columna «created_at» de tu base de datos, de los claims «iat» y «exp» de un JWT, del mtime de un archivo y de las marcas de tiempo de prácticamente cualquier registro que llegues a leer.
La contrapartida es que un número desnudo no le dice nada a una persona. 1716197600 es un instante perfectamente válido, pero de un vistazo no sabes si fue el martes pasado o hace tres años. Esa traducción, en ambos sentidos, es lo que hace esta herramienta.
Segundos o milisegundos: la ambigüedad que muerde
La convención original de Unix cuenta segundos enteros, y eso es lo que devuelven date +%s en una shell, time() en PHP y time.time() en Python una vez truncado. JavaScript, Java y muchos otros cuentan milisegundos: Date.now() devuelve un número mil veces mayor. Ambos se llaman «marca de tiempo», y confundirlos es uno de los errores de fechas más habituales que existen.
El fallo es silencioso, no ruidoso. Si lees un valor en milisegundos como segundos, tu fecha aterriza decenas de miles de años en el futuro; si lees uno en segundos como milisegundos, todo se hunde en enero de 1970. Ninguno lanza un error: simplemente obtienes una fecha equivocada con toda la apariencia de ser real.
Esta herramienta lo deduce por la magnitud del número y después te dice qué ha deducido, justo al lado del resultado. Los segundos epoch de hoy tienen diez dígitos y los milisegundos trece, así que el acierto es casi seguro; pero «casi» no basta para un valor que estás a punto de pegar en un informe de error, y por eso la lectura siempre está visible y siempre a un clic de cambiarse.
Zonas horarias, UTC y por qué «local» es resbaladizo
Una marca de tiempo Unix no tiene zona horaria. Identifica un instante, y ese mismo instante son simultáneamente las 09:33 en Londres, las 11:33 en Jerusalén y las 18:33 en Tokio. La zona horaria no forma parte del valor: es la lente con la que lo miras.
Por eso esta herramienta muestra varias lentes a la vez. UTC es la referencia neutra en la que coinciden todos los servidores y registros. Tu hora local es la que informa tu propio dispositivo, mostrada con el nombre de su zona (por ejemplo Europe/Berlin) para que siempre sepas qué lente la produjo: la detección ocurre en tu navegador, así que quien visite desde Berlín ve la hora de Berlín y quien lo haga desde Tokio ve la de Tokio. La tercera fila es la zona que elijas de la base de datos IANA completa, que es la que quieres cuando lees el registro de un servidor que vive en otro sitio.
- UTC: la referencia en la que coinciden todos los sistemas, y lo correcto para almacenar y registrar.
- Local: el mismo instante tal como lo ve tu dispositivo, etiquetado con la zona detectada.
- Una zona que elijas: para leer registros y trazas de máquinas que están en otra parte.
- ISO 8601: el formato de texto de intercambio, p. ej. 2024-05-20T09:33:20.000Z.
- Relativo: «hace 3 horas», para hacerte una idea rápida de cuán reciente es algo.
Los desfases se muestran junto a cada hora (+03:00, -04:00) porque no son fijos: la mayoría de las zonas se desplazan una hora por el horario de verano, de modo que una misma zona puede dar desfases distintos según la época del año. Una fecha cercana a un cambio es justo donde falla el cálculo a mano.
Trabajar con tiempo epoch en la práctica
Cada lenguaje y cada shell tiene su forma de producir y leer valores epoch. Estas son las que conviene recordar:
date +%s # shell: hora actual en segundos date -d @1716197600 # shell (GNU): de segundos a fecha Date.now() # JavaScript: hora actual en MILIsegundos new Date(1716197600 * 1000) # JavaScript: de segundos a Date time.time() # Python: segundos, como decimal datetime.fromtimestamp(1716197600, tz=timezone.utc) SELECT EXTRACT(EPOCH FROM now()) -- PostgreSQL: segundos
Una regla práctica que evita casi todo el dolor con fechas: almacena y transmite los instantes en UTC —como entero epoch o como cadena ISO 8601— y conviértelos a una zona local solo en el último momento, cuando de verdad se los muestras a alguien. Formatear demasiado pronto es como un error de zona horaria acaba cocido dentro de tus datos en lugar de quedarse en la capa de presentación.
Otra cosa que conviene saber: un contador de segundos de 32 bits con signo se agota el 19 de enero de 2038, el «problema del año 2038». Los sistemas modernos usan valores de 64 bits y no corren peligro, pero los dispositivos embebidos antiguos y las columnas heredadas de bases de datos son justo donde todavía puedes encontrártelo.
Preguntas frecuentes
- ¿Cómo sabe si mi número está en segundos o en milisegundos?
- Por su magnitud: los valores por debajo de unos 1e11 se leen como segundos y los mayores como milisegundos. Hoy eso separa limpiamente los segundos de diez dígitos de los milisegundos de trece. La lectura se muestra junto al resultado y puedes cambiarla con un clic, así que la deducción nunca se te oculta.
- ¿Qué zona horaria cuenta como «local»?
- La que informa tu propio dispositivo, detectada en tu navegador y mostrada por su nombre para que no haya dudas. Es tu zona, no la del sitio: quien visite desde Berlín ve la hora de Berlín y quien lo haga desde Tokio ve la de Tokio.
- ¿Puedo convertir una fecha de vuelta a marca de tiempo?
- Sí. El mismo campo acepta ambos sentidos: escribe un número y obtienes una fecha; escribe una fecha como 2024-05-20 o 2024-05-20T09:33:20Z y obtienes el valor epoch. No hay ningún modo que cambiar.
- ¿Admite fechas anteriores a 1970?
- Sí. Las marcas de tiempo anteriores al epoch son simplemente negativas —-86400 es el 31 de diciembre de 1969— y los valores negativos se aceptan y se convierten con normalidad.
- ¿Por qué mi marca de tiempo muestra una fecha distinta de la que esperaba?
- Casi siempre por una de dos razones: la lectura segundos/milisegundos no es la que suponías (mira la etiqueta y cámbiala), o estás comparando un valor UTC con una expectativa en hora local. La herramienta muestra ambas filas juntas para que veas cuál de las dos es.
- ¿Qué es el problema del año 2038?
- Los sistemas que guardan segundos epoch en un entero de 32 bits con signo desbordan el 19 de enero de 2038 y pasan a un número negativo, dando fechas de 1901. Todo lo que use valores de 64 bits —es decir, casi todo lo moderno— no se ve afectado, pero los sistemas embebidos heredados y las columnas antiguas de bases de datos sí pueden estar en riesgo.
- ¿Se envía a algún sitio la marca de tiempo que introduzco?
- No. El análisis, la conversión y el formateo se ejecutan íntegramente en tu navegador, usando el propio soporte de fechas y zonas horarias de la plataforma. Nada de lo que escribas sale de tu dispositivo.