ProxyWing

Tiempo Unix y marcas de tiempo Unix

Publicado: 22 de octubre de 2025
Última actualización: 7 de junio de 2026

¿Qué es el tiempo Unix?

El tiempo Unix (o «unixtime») es un sistema que representa un instante concreto contando el número de segundos transcurridos desde un momento de referencia fijo. Esa referencia se denomina época Unix (00:00:00 UTC del 1 de enero de 1970).

Las marcas de tiempo Unix almacenan los valores, básicamente, como simples números. Muchos sistemas informáticos y máquinas Linux adoptan el tiempo Unix como su método base de medición del tiempo.

Verá que, en el uso real, a la misma idea se la llama de formas distintas — marca de tiempo Unix, epoch time, tiempo POSIX o simplemente «un Unix stamp». Todos se refieren al mismo valor: el número de segundos transcurridos desde la época Unix. «Tiempo Unix» suele describir el sistema en sí, mientras que «marca de tiempo Unix» tiende a designar un número concreto almacenado, pero en la práctica los términos son intercambiables.

Los orígenes del tiempo Unix

La idea del tiempo Unix o unixtime surgió de los primeros sistemas operativos Linux y Unix, concebida como un formato de tiempo compacto y coherente. También se conoce como tiempo POSIX en muchos entornos basados en Linux.

Distintos sistemas han adoptado el tiempo Unix, donde se utiliza como formato de datos unificador para la información temporal. La elección del 1 de enero de 1970 como época Unix fue arbitraria, pero aportó una base sólida para la sincronización entre sistemas.

El tiempo POSIX y el comando «date»

En Linux, macOS y otros sistemas de tipo Unix, el núcleo del sistema operativo mantiene la hora internamente como una marca de tiempo Unix. El tiempo POSIX se refiere al mismo concepto, el nombre simplemente refleja la especificación IEEE Std 1003.1 que formalizó este comportamiento en los entornos de tipo Unix. En el uso diario, el tiempo POSIX y el tiempo Unix son el mismo número.

El shell expone ese número a través de la utilidad date. Al ejecutar «date +%s» se imprime la marca de tiempo Unix actual en segundos, y «date -d @1700000000» convierte de nuevo un valor almacenado en una fecha local legible. En macOS el equivalente es «date -r 1700000000». Estos comandos de una sola línea son la razón por la que el tiempo Unix es el lenguaje de facto de los scripts de shell, los trabajos cron y las herramientas de rotación de logs.

Cómo calcular el tiempo Unix

Para calcular el tiempo Unix, se cuenta el número de segundos no intercalares transcurridos desde la época Unix en UTC y se excluyen los años bisiestos y los segundos intercalares. Por ejemplo, para cualquier fecha o fechas posteriores al 1 de enero de 1970, se resta la época y se convierte la diferencia en segundos.

Cuando intervienen zonas horarias, primero se convierten las horas locales a UTC antes de hacer el cálculo. Como el tiempo Unix ignora los segundos intercalares, cada día se trata como exactamente 86,400 segundos, lo que significa que puede desviarse del tiempo atómico/UTC real cuando se insertan segundos intercalares.

La mayoría de los días en tiempo Unix se cuentan como exactamente 86,400 segundos. Esto significa que sumar un día suele incrementar la marca de tiempo en 86,400 (los días con segundo intercalar son la única excepción).

En JavaScript, podemos obtener el valor Unix actual llamando a Date.now() (que devuelve los milisegundos transcurridos desde la época) y dividiendo después entre 1000 para obtener la marca Unix en segundos.

Formato de la marca de tiempo Unix y ejemplos

Una marca de tiempo Unix estándar es un entero de 10 dígitos medido en segundos. Por ejemplo, 1700000000 corresponde al 14 de noviembre de 2023 a las 22:13:20 UTC. Añada tres dígitos más y tendrá milisegundos (13 dígitos), que es lo que devuelven por defecto JavaScript y muchas API web.

El formato es solo un recuento, no hay separador, ni etiqueta de zona horaria, ni metadatos de calendario. Todo está codificado en el propio número. Algunos puntos de referencia facilitan la lectura de la escala:

Fecha y hora (UTC)

Marca de tiempo Unix

1 de enero de 1970 00:00:00

0

20 de julio de 1969 20:17:40

-14182940

1 de enero de 2000 00:00:00

946684800

9 de septiembre de 2001 01:46:40

1000000000

1 de enero de 2024 00:00:00

1704067200

19 de enero de 2038 03:14:07

2147483647

Las fechas anteriores a la época son perfectamente válidas, simplemente llevan un signo menos. El valor -14182940 corresponde al momento exacto en que el Apolo 11 se posó en la Luna. La última fila de la tabla marca el límite superior de una marca de tiempo Unix de 32 bits con signo, que es donde entra en juego el problema del año 2038.

Obtener una marca de tiempo Unix en código

Todos los lenguajes principales exponen el tiempo Unix mediante una sola línea. Los valores que devuelven son idénticos, ya que la marca de tiempo es independiente de la zona horaria por definición.

  • JavaScript: Math.floor(Date.now() / 1000) para segundos, o Date.now() para milisegundos.
  • Python: import time; int(time.time()) para segundos enteros; omita int() para conservar la precisión inferior al segundo.
  • Bash / Linux: date +%s imprime la marca de tiempo Unix actual directamente en el terminal.
  • PHP: time() para segundos, microtime(true) para precisión fraccionaria.
  • Java: System.currentTimeMillis() / 1000L para segundos.
  • Go: time.Now().Unix().
  • SQL: UNIX_TIMESTAMP() en MySQL, EXTRACT(EPOCH FROM NOW()) en PostgreSQL.

La conversión inversa, de una marca de tiempo almacenada a una fecha legible para las personas, está igual de integrada. En Python es datetime.utcfromtimestamp(ts); en JavaScript, new Date(ts * 1000).toISOString(). Indique siempre de forma explícita la zona horaria de destino al mostrarla, ya que la propia marca de tiempo no lleva información de zona.

Segundos, milisegundos y mayor precisión

La marca de tiempo Unix original cuenta segundos enteros, pero los sistemas modernos a menudo necesitan una resolución más fina. La convención se reconoce fácilmente por el número de dígitos: 10 dígitos son segundos, 13 dígitos milisegundos, 16 dígitos microsegundos y 19 dígitos nanosegundos.

JavaScript usa milisegundos por defecto, Python y la mayoría de las bases de datos usan segundos por defecto, y los sistemas de alta frecuencia, como los motores de trading o las herramientas de trazabilidad distribuida, suelen trabajar en nanosegundos. Cuando reciba una marca de tiempo de una fuente desconocida, fíjese en el número de dígitos antes de analizarla, mezclar segundos y milisegundos sin darse cuenta es uno de los errores de fecha más habituales en el código de producción, y deja el resultado 1 000 veces desviado en un sentido o en el otro.

Usos habituales del tiempo Unix

El tiempo Unix se usa habitualmente para almacenar marcas de tiempo en bases de datos, logs, API y formatos de archivo. Los sistemas almacenan los valores de tiempo de forma uniforme utilizando este formato de tiempo.

Como evita la ambigüedad de las zonas horarias y las horas locales, este formato de datos es el preferido para intercambiar valores entre sistemas. Muchas API web devuelven marcas de tiempo Unix para que clientes y servidores puedan convertirlas en formatos de fecha legibles. También se utiliza para ordenar por orden cronológico, para la programación de tareas y para el registro de eventos en los sistemas informáticos.

El problema del año 2038

El tiempo Unix tiene un caso límite famoso. Los sistemas que almacenan el valor en un entero de 32 bits con signo solo pueden contar hasta 2,147,483,647 segundos, y ese techo se alcanza a las 03:14:07 UTC del 19 de enero de 2038. El siguiente tic desborda el número hacia el rango negativo y devuelve la fecha a 1901. A veces se le llama Y2038 o Unix Millennium Bug.

La mayoría de los sistemas operativos, bases de datos y lenguajes de programación modernos ya han pasado a marcas de tiempo de 64 bits, que llevan el límite a cientos de miles de millones de años en el futuro. El riesgo reside ahora sobre todo en el código heredado, el firmware embebido, los formatos de archivo antiguos y los binarios de 32 bits que nunca se han recompilado. La conclusión práctica es auditar los sistemas de larga vida en busca de tipos de tiempo de 32 bits codificados de forma fija.

Preguntas frecuentes

¿Cuántos dígitos tiene una marca de tiempo Unix?

Diez dígitos para los segundos (hasta el año 2286), trece para los milisegundos. Una marca de tiempo con una longitud distinta casi siempre indica un desajuste de precisión y conviene comprobarla antes de analizarla.

¿Es el tiempo Unix lo mismo que UTC?

No exactamente. El tiempo Unix cuenta los segundos desde un momento UTC fijo, por lo que está anclado en UTC por definición, pero no sigue los segundos intercalares como sí hace el UTC real. Para la mayoría de las aplicaciones la diferencia es invisible; para la medición de alta precisión, no.

¿Puede ser negativa una marca de tiempo Unix?

Sí. Los valores negativos representan fechas anteriores al 1 de enero de 1970. El cálculo es válido, aunque no todas las bibliotecas los manejan correctamente, haga pruebas antes de depender de ellos.

¿Cuál es la diferencia entre el tiempo Unix y el epoch time?

En el uso cotidiano, ninguna. Ambos términos describen los segundos transcurridos desde el 1 de enero de 1970 UTC. «Epoch time» es algo más genérico porque otros sistemas definen sus propias épocas (la época de .NET, la época de Mac OS, etc.), pero en el 99% de los contextos la gente se refiere al tiempo Unix.

¿Tiene alguna pregunta?