Tiempo Unix

Tiempo actual de Unix (Z)

Tiempo Unix o Tiempo POSIX es un sistema para la descripción de instantes de tiempo: se define como la cantidad de segundos transcurridos desde la medianoche UTC del 1 de enero de 1970, sin contar segundos intercalares. Es universalmente usado no solo en sistemas operativos tipo-Unix, sino también en muchos otros sistemas computacionales. No se trata ni de una representación lineal del tiempo, ni de una representación verdadera de UTC (a pesar de que frecuentemente se le confunde con ambos), pues el tiempo que representa es UTC, pero no tiene forma de representar segundos bisiestos de UTC (por ejemplo, 1998-12-31 23:59:60).

El viernes 13 de febrero de 2009, exactamente a las 23:31:30 (UTC), el tiempo Unix igualó a '1234567890'. Google celebró este momento añadiendo durante unos instantes en el logotipo de su página principal el código: date +%s comando que muestra la fecha actual en formato 'Unix Time'.

Algunos dispositivos con sistema operativo Android si se les retira la batería del mismo por unos instantes de tiempo y no tienen las actualizaciones automáticas, estos se reinician al Tiempo UNIX.

El tipo de datos time_t con el que se representa el tiempo en los sistemas UNIX es tradicionalmente un entero de 32 bits con signo. Con esto se puede cubrir un rango de unos 136 años. La fecha mínima representable es el viernes 1901-12-13, y la máxima es el martes 2038-01-19. Un segundo después de 03:14:07 UTC 2038-01-19 esta representación desbordará, lo que se conoce como el problema del año 2038.

Definición
Hay dos capas de codificación que conforman el tiempo Unix, y pueden ser útiles por separado. La primera capa codifica un instante de tiempo como un número real escalar, y la segunda codifica ese número como una secuencia de bits o de alguna otra manera.

Como es estándar con UTC, este artículo muestra las etiquetas usando el calendario gregoriano, agrupando el tiempo en minutos, horas, segundos y días. Algunos ejemplos se encuentran escritos en Tiempo Atómico Internacional (TAI), otro formato de tiempo, el cual continúa usando los segundos y un formato similar a UTC, pero en este cada día cuenta con exactamente 86400 segundos, por lo cual se desfasa alrededor de un segundo por año ante la rotación de la tierra.

Codificación del tiempo como un número 
El tiempo en Unix es un entero con signo que incrementa cada segundo, sin realizar cálculos necesarios para determinar el año, el día del mes, la hora y el minuto, haciendo ilegible la fecha para los humanos. El moderno Unix sigue el estándar UTC, el cual cuenta los segundos en SI, e implementa segundos intercalares lo cual permite realizar una sincronización con la traslación de la Tierra alrededor del Sol.

El tiempo en Unix se mide a partir de 00:00:00 UTC del 1 de enero de 1970. Hay un problema con esta definición, puesto que UTC no existió en su forma actual sino hasta 1972, cuando se establece como referencia 1970-01-01T00:00:00Z.

Tiempo UNIX en PHP
En PHP se puede obtener el tiempo UNIX con la siguiente función:
<?php
time();
?>
Y se codifica con la función date():
<?php
$tiempo_UNIX=time();
echo date("d/m/Y", $tiempo_UNIX);
?>
Eso daría como resultado el día/mes/año en que se ve la página que se visita, según el navegador que uses.

Tiempo UNIX en Python
En python se puede obtener el tiempo UNIX expresado en segundos, milisegundos y nanosegundos de la siguiente forma:
import time
tiempo_s = int(time.time())
tiempo_ms = int(time.time()*1000)
tiempo_ns = time.time_ns()

Tiempo UNIX en Bash
En bash se puede obtener el tiempo UNIX con el siguiente comando:
date +%s

Véase también 
 time_t
 Problema del año 2000
 Problema del año 2038

Notas

Referencias

Enlaces externos 
Manual del Programador de Unix, primera edición (en inglés)
Herramienta en línea para conversiones entre tiempo Unix y otros formatos
UNIX timestamp convertidor 
Otra herramienta en línea de conversión
Generador de marcas de Tiempo Unix
Archivo de lista de correo que comenta la historia del tiempo POSIX, por Landon Curt Noll
BASH: Conversión de marcas de tiempo Unix a una fecha
Conversor de marcas de tiempo UNIX a un formato legible
¿Cuánto falta para el segundo 1234567890?
Convertir a tiempo Unix
Convertir una fecha en formato unixtime (multilingüe)

Unix
Escalas de tiempo