
La hora Unix [ a ] es una representación de fecha y hora ampliamente utilizada en informática . Mide el tiempo por el número de segundos no intercalares transcurridos desde las 00:00:00 UTC del 1 de enero de 1970, la época Unix . Por ejemplo, a medianoche del 1 de enero de 2010, la hora Unix era 1262304000.
El tiempo Unix se originó como el tiempo del sistema de los sistemas operativos Unix . Posteriormente, se extendió su uso a otros sistemas operativos , sistemas de archivos , lenguajes de programación y bases de datos . En la informática moderna, a veces se almacenan valores con mayor precisión , como microsegundos o nanosegundos .
Definición
El tiempo Unix se define actualmente como el número de segundos no intercalares que han transcurrido desde las 00:00:00 UTC del jueves 1 de enero de 1970, lo que se conoce como la época Unix . [ 3 ] El tiempo Unix se codifica normalmente como un entero con signo .
El tiempo Unix0 es exactamente la medianoche UTC del 1 de enero de 1970, con el tiempo Unix incrementándose en 1 por cada segundo no intercalar después de esto. Por ejemplo, las 00:00:00 UTC del 1 de enero de 1971 se representan en tiempo Unix como31 536 000 . Los valores negativos, en los sistemas que los admiten, indican tiempos anteriores a la época Unix, disminuyendo el valor en 1 por cada segundo no intercalar anterior a la época. Por ejemplo, las 00:00:00 UTC del 1 de enero de 1969 se representan en tiempo Unix como−31 536 000 .
A veces se hace referencia al tiempo Unix como tiempo Epoch . Esto puede resultar engañoso, ya que el tiempo Unix no es el único sistema de tiempo basado en un epoch, y el epoch Unix no es el único epoch utilizado por otros sistemas de tiempo. [ 5 ]
Segundos intercalares
El tiempo Unix difiere tanto del Tiempo Universal Coordinado (UTC) como del Tiempo Atómico Internacional (TAI) en su manejo de los segundos intercalares . El UTC incluye segundos intercalares que ajustan la discrepancia entre el tiempo preciso, medido por relojes atómicos , y el tiempo solar , relacionado con la posición de la Tierra en relación con el Sol. El Tiempo Atómico Internacional (TAI), en el que cada día es precisamenteCon una duración de 86 400 segundos, ignora el tiempo solar y pierde gradualmente la sincronización con la rotación de la Tierra a medida que esta se ralentiza a aproximadamente 1,5 ms por día por siglo . En tiempo Unix, cada día contiene exactamente86 400 segundos. Cada segundo intercalar utiliza la marca de tiempo de un segundo que lo precede o lo sigue inmediatamente. [ 3 ]
En un día UTC normal, que tiene una duración de86 400 segundos, el número de tiempo Unix cambia de forma continua a lo largo de la medianoche. Por ejemplo, al final del día utilizado en los ejemplos anteriores, las representaciones de tiempo progresan de la siguiente manera:
Cuando ocurre un segundo intercalar , el día UTC no es exactamente86 400 segundos de duración y el número de tiempo Unix (que siempre aumenta exactamente86 400 cada día) experimenta una discontinuidad . Los segundos intercalares pueden ser positivos o negativos. Nunca se ha declarado un segundo intercalar negativo, pero si se declarara, al final de un día con un segundo intercalar negativo, el número de tiempo Unix aumentaría en 1 hasta el inicio del día siguiente. Durante un segundo intercalar positivo al final de un día, que ocurre aproximadamente cada año y medio en promedio, el número de tiempo Unix aumenta continuamente hasta el día siguiente durante el segundo intercalar y luego, al final del segundo intercalar, retrocede en 1 (volviendo al inicio del día siguiente). Por ejemplo, esto es lo que sucedió en los sistemas POSIX.1 que cumplían estrictamente con el estándar a finales de 1998:
Los números de tiempo Unix se repiten en el segundo inmediatamente posterior a un segundo intercalar positivo. El número de tiempo UnixEl valor 1 483 228 800 es, por lo tanto, ambiguo: puede referirse tanto al inicio del segundo intercalar (2016-12-31 23:59:60) como a su final, un segundo después (2017-01-01 00:00:00). En el caso teórico de que se produzca un segundo intercalar negativo, no se genera ambigüedad, sino que existe un rango de números de tiempo Unix que no se refieren a ningún punto en la hora UTC.
Un reloj Unix suele implementarse con un manejo diferente del segundo intercalar positivo, asociado al Protocolo de Tiempo de Red (NTP). Esto da como resultado un sistema que no cumple con el estándar POSIX. Consulte la sección siguiente sobre NTP para obtener más detalles.
Cuando se trabaja con periodos que no incluyen un segundo intercalar UTC, la diferencia entre dos números de tiempo Unix es igual a la duración en segundos del periodo entre los puntos correspondientes en el tiempo. Esta es una técnica de cálculo común. Sin embargo, cuando se producen segundos intercalares, estos cálculos dan un resultado incorrecto. En aplicaciones que requieren este nivel de precisión, es necesario consultar una tabla de segundos intercalares al trabajar con tiempos Unix, y a menudo es preferible utilizar una codificación de tiempo diferente que no presente este problema.
Un número de tiempo Unix se puede convertir fácilmente de nuevo a un tiempo UTC tomando el cociente y el módulo del número de tiempo Unix, módulo86 400. El cociente es el número de días desde la época, y el módulo es el número de segundos desde la medianoche UTC de ese día. Si se proporciona un número de tiempo Unix ambiguo debido a un segundo intercalar positivo, este algoritmo lo interpreta como la hora inmediatamente posterior a la medianoche. Nunca genera una hora que corresponda a un segundo intercalar. Si se proporciona un número de tiempo Unix inválido debido a un segundo intercalar negativo, genera una hora UTC igualmente inválida. Si estas condiciones son significativas, es necesario consultar una tabla de segundos intercalares para detectarlas.
Variante basada en el protocolo de tiempo de red no síncrono
Generalmente, un reloj Unix al estilo Mills se implementa con un manejo de segundos intercalares no síncrono con el cambio del número de tiempo Unix. El número de tiempo disminuye inicialmente donde debería haber ocurrido un salto, y luego salta al tiempo correcto 1 segundo después del salto. Esto facilita la implementación y se describe en el artículo de Mills. [ 6 ] Esto es lo que sucede durante un segundo intercalar positivo:
Esto se puede decodificar correctamente prestando atención a la variable de estado del segundo intercalar, que indica inequívocamente si el salto ya se ha realizado. El cambio de la variable de estado es síncrono con el salto.
Una situación similar se presenta con un segundo intercalar negativo, donde el segundo que se omite llega ligeramente tarde. El sistema muestra brevemente un valor de tiempo nominalmente imposible, pero esto puede detectarse mediante el estado TIME_DEL y corregirse.
En este tipo de sistema, el número de tiempo Unix incumple el estándar POSIX en lo que respecta a ambos tipos de segundos intercalares. Recopilar la variable de estado del segundo intercalar junto con el número de tiempo permite una decodificación inequívoca, de modo que se puede generar el número de tiempo POSIX correcto si se desea, o bien almacenar la hora UTC completa en un formato más adecuado.
La lógica de decodificación necesaria para manejar este estilo de reloj Unix también decodificaría correctamente un hipotético reloj compatible con POSIX utilizando la misma interfaz. Esto se lograría indicando el estado TIME_INS durante todo un segundo intercalar insertado, y luego indicando TIME_WAIT durante todo el segundo siguiente mientras se repite el conteo de segundos. Esto requiere un manejo síncrono de segundos intercalares. Probablemente, esta sea la mejor manera de expresar la hora UTC en formato de reloj Unix, a través de una interfaz Unix, cuando el reloj subyacente no se ve afectado por los segundos intercalares.
Variante que cuenta los segundos intercalares
Otra variante mucho más rara y no conforme del sistema de medición del tiempo de Unix implica incrementar el valor para todos los segundos, incluidos los segundos intercalares; [ 7 ] algunos sistemas Linux están configurados de esta manera. [ 8 ] El tiempo mantenido de esta forma a veces se denomina "TAI" (aunque las marcas de tiempo se pueden convertir a UTC si el valor corresponde a un momento en el que se conoce la diferencia entre TAI y UTC), en contraposición a "UTC" (aunque no todos los valores de tiempo UTC tienen una referencia única en sistemas que no cuentan los segundos intercalares). [ 8 ]
Dado que TAI no tiene segundos intercalares y cada día TAI tiene una duración exacta de 86400 segundos, esta codificación es en realidad un conteo lineal puro de los segundos transcurridos desde el 1 de enero de 1970 a las 00:00:10 TAI. Esto simplifica enormemente los cálculos de intervalos de tiempo. Los valores de tiempo de estos sistemas no presentan la ambigüedad que sí tienen los sistemas POSIX o los sistemas basados en NTP que cumplen estrictamente con el estándar.
En estos sistemas, es necesario consultar una tabla de segundos intercalares para convertir correctamente entre UTC y la representación de tiempo pseudo-Unix. Esto se asemeja a la forma en que se deben consultar las tablas de zonas horarias para convertir desde y hacia la hora civil ; la base de datos de zonas horarias de la IANA incluye información sobre segundos intercalares, y el código de ejemplo disponible en la misma fuente utiliza esa información para convertir entre marcas de tiempo basadas en TAI y la hora local. La conversión también presenta problemas de definición anteriores al inicio de la forma actual de UTC en 1972 (véase la sección Base de UTC más adelante).
Este sistema, a pesar de su parecido superficial, no es tiempo Unix. Codifica los tiempos con valores que difieren en varios segundos de los valores de tiempo POSIX. Se propuso una versión de este sistema, en la que la época era 1970-01-01T00:00:00 TAI en lugar de 1970-01-01T00:00:10 TAI, para su inclusión en ISO C time.h, pero solo se aceptó la parte UTC en 2011. [ 9 ]tai_clock Sin embargo, existe una versión en C++20.
Representando el número
Un número de tiempo Unix puede representarse de cualquier forma que permita representar números. En algunas aplicaciones, el número se representa simplemente como una cadena de dígitos decimales, lo que solo genera problemas adicionales triviales. Sin embargo, ciertas representaciones binarias de los tiempos Unix son particularmente importantes.
El tipo de datos Unix que representa un punto en el tiempo es, en muchas plataformas, un entero con signo , tradicionalmente de 32 bits (pero véase más abajo ), que codifica directamente el número de tiempo Unix como se describe en la sección anterior. Un valor con signo de 32 bits cubre aproximadamente 68 años antes y después de la época del 1 de enero de 1970. La fecha mínima representable es el viernes 13 de diciembre de 1901 y la fecha máxima representable es el martes 19 de enero de 2038. Un segundo después del 19 de enero de 2038 a las 03:14:07Z, esta representación se desbordará en lo que se conoce como el problema del año 2038 .time_t
UUIDv 7 codifica la marca de tiempo de la época Unix (en milisegundos) en un campo sin signo de 48 bits. Esta representación es válida hasta el año 10889. [ 10 ]
En algunos sistemas operativos más recientes, time_tse ha ampliado a 64 bits. Esto amplía los tiempos representables a292 277 264 695 ( 292.3 mil millones) de años en ambas direcciones, lo que es más de veinte veces la edad actual del universo .
Inicialmente, hubo cierta controversia sobre si el tipo de dato Unix time_tdebía ser firmado o no firmado. Si era no firmado, su rango futuro se duplicaría, posponiendo el desbordamiento de 32 bits (en 68 años). Sin embargo, entonces sería incapaz de representar tiempos anteriores a la época. El consenso es que debe time_tser firmado, y esta es la práctica habitual. La plataforma de desarrollo de software para la versión 6 del sistema operativo QNX utiliza un tipo de dato de 32 bits no firmado time_t, aunque las versiones anteriores usaban un tipo firmado.
Las especificaciones POSIX y Open Group Unix incluyen la biblioteca estándar C , que contiene los tipos de tiempo y las funciones definidas en el archivo de cabecera. El estándar ISO C establece que debe ser un tipo aritmético, pero no exige ningún tipo o codificación específica. POSIX requiere que sea un tipo entero, pero no exige que sea con signo o sin signo.<time.h>time_ttime_t
Unix no tiene la tradición de representar directamente los números de tiempo Unix no enteros como fracciones binarias. En cambio, los tiempos con precisión de subsegundo se representan utilizando tipos de datos compuestos que constan de dos enteros, el primero es a time_t(la parte entera del tiempo Unix) y el segundo es la parte fraccionaria del número de tiempo en millonésimas (en struct timeval) o milmillonésimas (en struct timespec). [ 11 ] [ 12 ] Estas estructuras proporcionan un formato de datos de punto fijo basado en decimal , que es útil para algunas aplicaciones y trivial de convertir para otras.
base UTC
La forma actual del UTC, con segundos intercalares, se definió a partir del 1 de enero de 1972. Anteriormente, desde el 1 de enero de 1961, existía una forma anterior del UTC en la que no solo había saltos de tiempo ocasionales, que eran de segundos no enteros, sino que además el segundo UTC era ligeramente más largo que el segundo del SI y cambiaba periódicamente para aproximarse continuamente a la rotación de la Tierra. Antes de 1961 no existía el UTC, y antes de 1958 no había una cronometría atómica generalizada ; en esas épocas, se utilizaba alguna aproximación del GMT (basada directamente en la rotación de la Tierra) en lugar de una escala de tiempo atómica.
La definición precisa del tiempo Unix como codificación de UTC solo resulta indiscutible cuando se aplica a la forma actual de UTC. La época Unix anterior al inicio de esta forma de UTC no afecta su uso en la actualidad: el número de días transcurridos desde el 1 de enero de 1970 (la época Unix) hasta el 1 de enero de 1972 (el inicio de UTC) no está en discusión, y el número de días es lo único relevante para el tiempo Unix.
El significado de los valores de tiempo Unix a continuaciónEl formato +63 072 000 (es decir, anterior al 1 de enero de 1972) no está definido con precisión. Se entiende mejor que la base de estas horas Unix es una aproximación no especificada de UTC. En cualquier caso, los ordenadores de aquella época rara vez tenían relojes con la precisión suficiente para proporcionar marcas de tiempo significativas con una precisión inferior al segundo. El formato de hora Unix no es adecuado para representar horas anteriores a 1972 en aplicaciones que requieren una precisión inferior al segundo; dichas aplicaciones deben, como mínimo, definir qué formato de UTC o GMT utilizan.
A partir de 2009Se está considerando la posibilidad de eliminar el uso de segundos intercalares en la hora civil. [ 13 ] Un medio probable para implementar este cambio es definir una nueva escala de tiempo, llamada Tiempo Internacional , que inicialmente coincida con UTC pero que posteriormente no tenga segundos intercalares, manteniendo así una diferencia constante con respecto a TAI. Si esto sucede, es probable que la hora Unix se defina prospectivamente en términos de esta nueva escala de tiempo, en lugar de UTC. La incertidumbre sobre si esto ocurrirá hace que la hora Unix prospectiva no sea menos predecible de lo que ya es: si UTC simplemente no tuviera más segundos intercalares, el resultado sería el mismo.
Historia
Las primeras versiones de la hora Unix tenían un entero de 32 bits que se incrementaba a una velocidad de 60 Hz , que era la velocidad del reloj del sistema en el hardware de los primeros sistemas Unix. Las marcas de tiempo almacenadas de esta manera solo podían representar un rango de poco más de dos años y cuarto. La época desde la que se contaba se cambió con las versiones de Unix para evitar desbordamientos, y tanto la medianoche del 1 de enero de 1971 como el 1 de enero de 1972 se usaron como épocas durante el desarrollo inicial de Unix. Las primeras definiciones de la hora Unix tampoco tenían zonas horarias. [ 14 ] [ 15 ]
La época actual del 1 de enero de 1970 a las 00:00:00 UTC fue seleccionada arbitrariamente por los ingenieros de Unix porque se consideró una fecha conveniente para trabajar. La precisión se cambió para contar en segundos con el fin de evitar desbordamientos a corto plazo. [ 1 ]
Cuando se redactó POSIX.1 , surgió la cuestión de cómo definir con precisión el tiempo time_ten presencia de segundos intercalares. El comité POSIX consideró si el tiempo Unix debía seguir siendo, como se pretendía, un conteo lineal de segundos desde la época, a costa de la complejidad en las conversiones con la hora civil, o una representación de la hora civil, a costa de la inconsistencia en torno a los segundos intercalares. Los relojes de las computadoras de la época no estaban calibrados con la suficiente precisión como para sentar un precedente en un sentido u otro.
El comité POSIX se dejó convencer por los argumentos en contra de la complejidad en las funciones de la biblioteca [ 16 ] y definió firmemente el tiempo Unix de manera simple en términos de los elementos del tiempo UTC. Esta definición era tan simple que ni siquiera abarcaba la regla completa del año bisiesto del calendario gregoriano, y convertiría el año 2100 en un año bisiesto.
La edición de 2001 de POSIX.1 corrigió la regla errónea del año bisiesto en la definición de la hora Unix, pero mantuvo la definición esencial de la hora Unix como una codificación de UTC en lugar de una escala de tiempo lineal. Desde mediados de la década de 1990, los relojes de las computadoras se han ajustado rutinariamente con la precisión suficiente como para que esto sea relevante, y generalmente se han ajustado utilizando la definición de la hora Unix basada en UTC. Esto ha generado una complejidad considerable en las implementaciones de Unix y en el Protocolo de Tiempo de Red (NTP ) para ejecutar pasos en el número de tiempo Unix cuando ocurren segundos intercalares.
Uso
El tiempo Unix se utiliza ampliamente en informática, más allá de su aplicación original como hora del sistema Unix . Está disponible en casi todas las API de programación de sistemas, incluidas las proporcionadas por sistemas operativos basados en Unix y otros que no lo son . Casi todos los lenguajes de programación modernos ofrecen API para trabajar con el tiempo Unix o convertirlo a otra estructura de datos. El tiempo Unix también se utiliza como mecanismo para almacenar marcas de tiempo en diversos sistemas de archivos , formatos de archivo y bases de datos .
La biblioteca estándar de C utiliza la hora Unix para todas las funciones de fecha y hora, y a veces se la denomina time_t, el nombre del tipo de datos utilizado para las marcas de tiempo en C y C++ . Las funciones de hora Unix de C están definidas como la API de tiempo del sistema en la especificación POSIX . [ 17 ] La biblioteca estándar de C se utiliza ampliamente en todos los sistemas operativos de escritorio modernos, incluidos Microsoft Windows y sistemas tipo Unix como macOS y Linux , donde es una interfaz de programación estándar. [ 18 ] [ 19 ] [ 20 ]
iOS proporciona una API Swift que por defecto utiliza una época del 1 de enero de 2001, pero también puede utilizarse con marcas de tiempo Unix. [ 21 ] Android utiliza la hora Unix junto con una zona horaria para su API de hora del sistema. [ 22 ]
Windows no utiliza el tiempo Unix para almacenar la hora internamente, pero sí lo utiliza en las API del sistema, que se proporcionan en C++ e implementan la especificación de la biblioteca estándar de C. [ 18 ] El tiempo Unix se utiliza en el formato PE para los ejecutables de Windows. [ 23 ]
El tiempo Unix suele estar disponible en los principales lenguajes de programación y se utiliza ampliamente en la programación de aplicaciones de escritorio, móviles y web. Java proporciona un objeto Instant que almacena una marca de tiempo Unix tanto en segundos como en nanosegundos. [ 24 ] Python proporciona una biblioteca de tiempo que utiliza el tiempo Unix. [ 25 ] JavaScript proporciona una biblioteca Date que proporciona y almacena marcas de tiempo en milisegundos desde la época Unix y está implementada en todos los navegadores web modernos de escritorio y móviles , así como en entornos de servidor JavaScript como Node.js. [ 26 ]
Free Pascal implementa la hora UNIX con las funciones GetTickCount (obsoleta, sin signo, de 32 bits) y GetTickCount64 (sin signo, de 64 bits) con una resolución de 1 ms en plataformas tipo Unix .
Los sistemas de archivos diseñados para usarse con sistemas operativos basados en Unix tienden a usar la hora Unix. APFS , el sistema de archivos usado por defecto en todos los dispositivos Apple, y ext4 , que se usa ampliamente en dispositivos Linux y Android, usan la hora Unix en nanosegundos para las marcas de tiempo de los archivos. [ 27 ] [ 28 ] Varios formatos de archivos comprimidos pueden almacenar marcas de tiempo en la hora Unix, incluidos RAR y tar . [ 29 ] [ 30 ] La hora Unix también se usa comúnmente para almacenar marcas de tiempo en bases de datos, incluidas MySQL y PostgreSQL . [ 31 ] [ 32 ]
Limitaciones
El sistema de tiempo Unix se diseñó para codificar fechas y horas del calendario de forma compacta, con el fin de que los ordenadores lo utilicen internamente. No está pensado para que los humanos lo lean fácilmente ni para almacenar valores dependientes de la zona horaria. Además, por defecto, solo representa el tiempo en segundos, lo que lo hace inadecuado para cuando se necesita una medición más precisa, como al medir el tiempo de ejecución de los programas. [ 33 ]
Rango de tiempos representables

El tiempo Unix, por diseño, no requiere un tamaño específico para el almacenamiento, pero la mayoría de las implementaciones comunes de tiempo Unix usan un entero con signo del mismo tamaño que el tamaño de palabra del hardware subyacente. Como la mayoría de las computadoras modernas son de 32 o 64 bits , y una gran cantidad de programas todavía se escriben en modo de compatibilidad de 32 bits, esto significa que muchos programas que usan tiempo Unix usan campos enteros con signo de 32 bits. El valor máximo de un entero con signo de 32 bits es 2³¹ - 1 , y el valor mínimo es -2³¹ , lo que hace imposible representar fechas anteriores al 13 de diciembre de 1901 (a las 20:45:52 UTC) o posteriores al 19 de enero de 2038 (a las 03:14:07 UTC). El límite temprano puede tener un impacto en las bases de datos que almacenan información histórica; En algunas bases de datos donde se utiliza la hora Unix de 32 bits para las marcas de tiempo, puede ser necesario almacenar la hora en un tipo de campo diferente, como una cadena, para representar fechas anteriores a 1901. El límite tardío se conoce como el problema del año 2038 y puede causar problemas a medida que se acerca la fecha, ya que las fechas posteriores al límite de 2038 volverían al inicio del rango representable en 1901. [ 33 ] : 60 [ 34 ]
Los límites de rango de fechas no son un problema con las representaciones de 64 bits del tiempo Unix, ya que el rango efectivo de fechas que se pueden representar con el tiempo Unix almacenado en un entero con signo de 64 bits es de más de 584 mil millones de años, o 292 mil millones de años en cualquier dirección de la época de 1970. [ 33 ] : 60-61 [ 35 ]
Alternativas
El tiempo Unix no es el único estándar de tiempo que cuenta a partir de una época. La estructura del lenguaje de programación C# , el tipo en Windows y la función de Azure Cosmos DB almacenan el tiempo como un recuento de intervalos de 100 nanosegundos que han transcurrido desde las 0:00 GMT del 1 de enero de 1 d. C. , [ 36 ] 1 de enero de 1601, [ 37 ] y 1 de enero de 1970, [ 38 ] que no se desbordará hasta los años 29228, [ 39 ] [ 40 ] 30828, [ 39 ] [ 41 ] y 31197, [ 42 ] respectivamente. El tiempo de época de Windows se utiliza para almacenar marcas de tiempo para archivos [ 43 ] y en protocolos como el Servicio de tiempo de Active Directory [ 44 ] y Server Message Block .DateTimeFILETIMEGetCurrentTicksStatic
El protocolo de tiempo de red (NTP) utilizado para coordinar el tiempo entre computadoras utiliza una época del 1 de enero de 1900, contada en un entero sin signo de 32 bits para los segundos y otro entero sin signo de 32 bits para las fracciones de segundo, que se reinicia cada 2³² segundos (aproximadamente una vez cada 136 años). [ 45 ]
Muchas aplicaciones y lenguajes de programación proporcionan métodos para almacenar la hora con una zona horaria explícita. [ 46 ] También existen varios estándares de formato de hora que son legibles tanto por humanos como por computadoras, como ISO 8601 .
Acontecimientos notables en la era Unix
Los entusiastas de Unix tienen una larga tradición de celebrar "time_t parties" (pronunciado "time tea parties ") para conmemorar valores significativos del número de tiempo Unix. [ 47 ] [ 48 ] Estas son directamente análogas a las celebraciones de Año Nuevo que tienen lugar con el cambio de año en muchos calendarios. A medida que se ha extendido el uso del tiempo Unix, también lo ha hecho la práctica de celebrar sus hitos. Por lo general, se celebran valores de tiempo que son números redondos en decimal , siguiendo la convención de Unix de visualizar time_tvalores en decimal. En algunos grupos también se celebran números binarios redondos, como +2 30 , que ocurrió a las 13:37:04 UTC del sábado 10 de enero de 2004.
Los eventos que se conmemoran suelen describirse como " N segundos desde la época Unix", pero esto es inexacto; como se explicó anteriormente, debido al manejo de los segundos intercalares en el tiempo Unix, el número de segundos transcurridos desde la época Unix es ligeramente mayor que el número de tiempo Unix para los tiempos posteriores a la época.
- A las 18:36:57 UTC del miércoles 17 de octubre de 1973, tuvo lugar la primera aparición de la fecha en formato ISO 8601 [ b ] (1973-10-17) dentro de los dígitos de la hora Unix (119731017).
- A las 01:46:40 UTC del domingo 9 de septiembre de 2001, el milenio de Unix (número de tiempo Unix)1 000 000 000 ) fue celebrado. [ 49 ] El nombre billennium es una combinación de billion y millennium . [ 50 ] [ 51 ] Algunos programas que almacenaban marcas de tiempo usando una representación de texto encontraron errores de ordenación, como en una ordenación de texto, los tiempos posteriores al cambio que comenzaban con un dígito 1 se ordenaban erróneamente antes que los tiempos anteriores que comenzaban con un dígito 9. Los programas afectados incluían el popular lector de Usenet KNode y el cliente de correo electrónico KMail , parte del entorno de escritorio KDE . Tales errores eran generalmente de naturaleza cosmética y se corregían rápidamente una vez que los problemas se hacían evidentes. El problema también afectó a muchos filtros de formato de documento Filtrix proporcionados con las versiones de Linux de WordPerfect ; la comunidad de usuarios creó un parche para resolver este problema, ya que Corel ya no vendía ni daba soporte a esa versión del programa. [ 52 ]
- A las 23:31:30 UTC del viernes 13 de febrero de 2009, la representación decimal del tiempo Unix alcanzó1 234 567 890 segundos. [ 53 ] Google lo celebró con un Google Doodle . [ 54 ] Se celebraron fiestas y otras celebraciones en todo el mundo, entre varias subculturas técnicas, para celebrar el1 234 567 890 segundo. [ 47 ] [ 55 ]
En la cultura popular
La novela de Vernor Vinge, A Deepness in the Sky, describe una civilización comercial espacial que, miles de años en el futuro, aún utiliza la época Unix. El " programador-arqueólogo " responsable de encontrar y mantener código utilizable en sistemas informáticos maduros cree inicialmente que la época se refiere al momento en que el hombre pisó la Luna por primera vez , pero luego se da cuenta de que es "el segundo 0 de uno de los primeros sistemas operativos de la humanidad". [ 56 ]
Véase también
Notas
Referencias
- 1 2 Farhad, Manjoo (8 de septiembre de 2001). "Unix Tick Tocks to a Billion" . Wired . ISSN 1059-1028 . Archivado del original el 11 de septiembre de 2022. Recuperado el 16 de octubre de 2022 .
- ↑ "Especificaciones básicas de The Open Group, número 7, Fundamento: Definiciones básicas, sección A.4 Conceptos generales" . The Open Group . Archivado del original el 15 de noviembre de 2017. Consultado el 9 de septiembre de 2019 .
- 1 2 3 "Especificaciones básicas de The Open Group, número 7, sección 4.16 Segundos desde la época" . The Open Group . Archivado del original el 22 de diciembre de 2017. Recuperado el 22 de enero de 2017 .
- ↑ Matthew, Neil; Stones, Richard (2008). "El entorno Linux". Introducción a la programación en Linux . Indianápolis, Indiana, EE. UU.: Wiley. pág. 148. ISBN 978-0-470-14762-7.
- ↑ "Estructura FILETIME (minwinbase.h)" . Microsoft Docs . 2 de abril de 2021.
- ↑ Mills, David L. (12 de mayo de 2012). "La escala de tiempo del NTP y los segundos intercalares" . eecis.udel.edu . Archivado del original el 15 de mayo de 2012. Recuperado el 21 de agosto de 2017 .
- ↑ "Control preciso del tiempo" . Fuentes de datos de zona horaria y horario de verano . Archivado del original el 16 de octubre de 2017. Recuperado el 30 de mayo de 2022.
El código y los datos tz admiten segundos intercalares mediante una configuración "derecha" opcional en la que el reloj interno de enteros time_t de un ordenador cuenta cada segundo TAI, a diferencia de la configuración "posix" predeterminada en la que el reloj interno ignora los segundos intercalares. Las dos configuraciones coinciden para las marcas de tiempo que comienzan con 1972-01-01 00:00:00 UTC (time_t 63 072 000) y divergen para las marcas de tiempo que comienzan con time_t 78 796 800, que corresponde al primer segundo intercalar 1972-06-30 23:59:60 UTC en la configuración "derecha", y a 1972-07-01 00:00:00 UTC en la configuración "posix".
- 1 2 "Escalas de tiempo" . Wiki del protocolo de tiempo de red . 24 de julio de 2019. Archivado del original el 12 de enero de 2020. Recuperado el 12 de enero de 2020 .
- ↑ Markus Kuhn. " API modernizada para ISO C" . www.cl.cam.ac.uk. Archivado del original el 26 de septiembre de 2020. Consultado el 31 de agosto de 2020 .
- ↑ RFC 9562
- ↑ "timespec" . Páginas del manual de NetBSD . 12 de abril de 2011. Archivado del original el 10 de agosto de 2019. Consultado el 5 de julio de 2019 .
- ↑ "time.h(0P)" . Página del manual de Linux . Archivado del original el 27 de junio de 2019. Consultado el 5 de julio de 2019 .
- ↑ McCarthy, DD ; Seidelmann, PK (2009). TIEMPO: De la rotación de la Tierra a la física atómica . Weinheim: Wiley–VCH Verlag GmbH & Co. KGaA. pág. 232. ISBN 978-3-527-40780-4.
- ↑ Manual del programador de Unix (PDF) (1.ª ed.). 3 de noviembre de 1971. Archivado (PDF) del original el 5 de marzo de 2022. Recuperado el 28 de marzo de 2012.
time
devuelve el tiempo transcurrido desde las 00:00:00 del 1 de enero de 1971, medido en sexagésimas de segundo.
- ↑ Manual del programador de Unix (PDF) (3.ª ed.). 15 de marzo de 1972. Archivado (PDF) del original el 12 de febrero de 2023. Recuperado el 11 de febrero de 2023.
time
devuelve el tiempo transcurrido desde las 00:00:00 del 1 de enero de 1972, medido en sexagésimas de segundo... El tiempo se almacena en 32 bits. Esto garantiza una crisis cada 2,26 años.
- ↑ "Posix se ha vuelto obsoleto (2016) [ pdf ] | Hacker News" . news.ycombinator.com . Archivado del original el 18 de marzo de 2025. Consultado el 23 de julio de 2025 .
- ↑ "Especificaciones base del estándar técnico de The Open Group, número 7 (edición de 2018)" . IEEE y The Open Group. Archivado del original el 1 de mayo de 2023. Consultado el 1 de mayo de 2023 .
- 1 2 "time, _time32, _time64" . learn.microsoft.net . Microsoft Corporation. 13 de febrero de 2023. Archivado del original el 1 de mayo de 2023. Recuperado el 1 de mayo de 2023 .
- ↑ "La biblioteca C de GNU (glibc)" . El sistema operativo GNU . Fundación del Software Libre. Archivado del original el 22 de abril de 2016. Consultado el 1 de mayo de 2023.
El proyecto de la biblioteca C de GNU proporciona las bibliotecas principales para el sistema GNU y los sistemas GNU/Linux, así como para muchos otros sistemas que utilizan Linux como núcleo.
- ↑ "Página del manual de Mac OS X para localtime(3)" . Archivo de documentación de Apple . Apple Inc. Archivado del original el 22 de julio de 2022. Recuperado el 1 de mayo de 2023 .
- ↑ "NSDate" . Documentación para desarrolladores de Apple . Apple Inc. Archivado del original el 1 de mayo de 2023. Consultado el 1 de mayo de 2023 .
- ↑ "Resumen del tiempo" . Proyecto de código abierto de Android . Google LLC. Archivado del original el 1 de mayo de 2023. Consultado el 1 de mayo de 2023 .
- ↑ "Formato PE - Aplicaciones Win32" . learn.microsoft.com . Microsoft Corporation. 24 de marzo de 2023. Archivado del original el 29 de abril de 2023. Consultado el 1 de mayo de 2023 .
- ↑ "Instant (Java Platform SE 8)" . docs.oracle.com . Oracle. Archivado del original el 25 de noviembre de 2016. Consultado el 1 de mayo de 2023 .
- ↑ "time — Acceso y conversiones de tiempo" , documentación de Python , archivado del original el 22 de julio de 2022 , consultado el 25 de julio de 2022.
- ↑ "Fecha - JavaScript | MDN" . developer.mozilla.org . Mozilla. Archivado del original el 21 de julio de 2021. Recuperado el 1 de mayo de 2023 .
- ↑ Referencia del sistema de archivos de Apple (PDF) , pág. 57, archivado (PDF) del original el 5 de noviembre de 2022 , recuperado el 19 de octubre de 2022.
Esta marca de tiempo se representa como el número de nanosegundos desde el 1 de enero de 1970 a las 0:00 UTC, sin tener en cuenta los segundos intercalares.
- ↑ "Estructuras de datos y algoritmos" . Documentación del núcleo de Linux . Linux Kernel Organization, Inc. Archivado del original el 1 de mayo de 2023. Consultado el 1 de mayo de 2023 .
- ↑ "Formato de archivo RAR 5.0" . www.rarlab.com . win.rar GmbH. Archivado del original el 1 de mayo de 2023. Recuperado el 1 de mayo de 2023.
La hora se almacena en formato Unix time_t si se establece esta bandera [sic] y en formato Windows FILETIME en caso contrario.
- ↑ "Familia de formatos de archivo de archivo de cinta (tar)" . www.loc.gov . Biblioteca del Congreso. 7 de enero de 2021. Archivado del original el 1 de mayo de 2023. Consultado el 1 de mayo de 2023 .
- ↑ "Funciones de fecha y hora" , Manual de referencia de MySQL 8.0 , archivado del original el 19 de octubre de 2022 , consultado el 19 de octubre de 2022.
- ↑ "8.5. Tipos de fecha/hora" . Documentación de PostgreSQL . Grupo de Desarrollo Global de PostgreSQL. 9 de febrero de 2023. Archivado del original el 1 de mayo de 2023. Consultado el 1 de mayo de 2023 .
- 1 2 3 Rochkind, Mark (2004). Programación avanzada en UNIX (2.ª ed.). Addison-Wesley. págs. 56–63 . ISBN 978-0-13-141154-8.
- ↑ "¿Cuál es el problema del año 2038?" . HowStuffWorks . 1 de abril de 2000 . Consultado el 23 de julio de 2025 .
- ↑ Saxena, Ashutosh; Rawat, Sanjay. "IDRBT Working Paper No. 9" (PDF) . Archivado del original (PDF) el 13 de mayo de 2012.
- ↑ "DateTime Struct (System)" . learn.microsoft.com . Consultado el 14 de enero de 2025 .
- ↑ "FILETIME (minwinbase.h) - Aplicaciones Win32" . Microsoft Learn . Microsoft. 2 de abril de 2021. Archivado del original el 10 de marzo de 2023. Consultado el 9 de marzo de 2023 .
- ↑ "GetCurrentTicks - Azure Cosmos DB para NoSQL" . learn.microsoft.com . Consultado el 31 de agosto de 2025 .
- 1 2 "Fechas críticas y significativas" . people.cs.nycu.edu.tw . Consultado el 12 de febrero de 2024 .
- ↑ " Soluciones para cuentas que caducan con AAD Connect: REDUX" . www.undocumented-features.com
- ↑ Thulin, Anders (6 de abril de 2013). "Interpretación de marcas de tiempo NTFS" . Forensic Focus . Recuperado el 23 de julio de 2019 .
- ↑ "Fecha" .
- ↑ "Tiempos de archivo - Aplicaciones Win32" . Microsoft Learn . Microsoft. 7 de enero de 2021. Archivado del original el 8 de marzo de 2023. Consultado el 9 de marzo de 2023 .
- ↑ "Cómo convertir atributos de fecha/hora en Active Directory al formato de hora estándar" . Microsoft Learn . Microsoft. Archivado del original el 20 de octubre de 2022. Consultado el 20 de octubre de 2022 .
- ↑ W. Richard Stevens; Bill Fenner; Andrew M. Rudoff (2004). Programación de redes UNIX . Addison-Wesley Professional. págs. 582–. ISBN 978-0-13-141155-5Archivado del original el 30 de marzo de 2019. Consultado el 16 de octubre de 2016 .
- ↑ "datetime — Tipos básicos de fecha y hora" . Referencia de la biblioteca estándar de Python . Python Software Foundation. Archivado del original el 19 de octubre de 2022. Consultado el 20 de octubre de 2022.
Atributos: año, mes, día, hora, minuto, segundo, microsegundo y tzinfo.
- 1 2 Tweney, Dylan (12 de febrero de 2009). "Los amantes de Unix se van de fiesta como si fuera 1234567890" . Wired . Archivado del original el 29 de marzo de 2014. Recuperado el 12 de marzo de 2017 .
- ↑ "Slashdot | fecha +%s Cumple 1111111111" . 17 de marzo de 2005. Archivado del original el 12 de enero de 2020. Recuperado el 12 de enero de 2020 .
- ↑ "Datos y curiosidades sobre la hora en Unix – Unix Time . Info" . Archivado del original el 27 de octubre de 2017.
- ↑ "UNIX se acerca a la avanzada edad de mil millones" . Electromagnetic.net. Archivado del original el 16 de julio de 2023. Recuperado el 6 de diciembre de 2012 .
- ↑ Neumann, Peter G. (15 de octubre de 2001). "The RISKS Digest, Volumen 21 Número 69" . The Risks Digest . 21 (69). Archivado del original el 22 de octubre de 2015. Recuperado el 6 de diciembre de 2012 .
- ↑ "Problemas técnicos" . linuxmafia.com . Archivado del original el 11 de octubre de 2012. Consultado el 21 de agosto de 2017 .
- ↑ nixCraft (9 de febrero de 2009). "Humor: El viernes 13 de febrero de 2009, la hora Unix será 1234567890" . Cyberciti.biz . Consultado el 5 de julio de 2023 .
- ↑ "Logotipo de Google 1234567890" . Google Inc. Archivado del original el 11 de enero de 2013. Consultado el 28 de enero de 2013 .
- ↑ Ahmed, Murad (13 de febrero de 2009). "Al tercer golpe, la hora Unix será 1234567890" . The Times . Archivado del original el 14 de noviembre de 2016. Consultado el 12 de enero de 2020 .
- ↑ Mashey, John R. (27 de diciembre de 2004). "Lenguajes, niveles, bibliotecas y longevidad" . ACM Queue . 2 (9): 32– 38. doi : 10.1145/1039511.1039532 . S2CID 28911378 .
Enlaces externos
- Manual del programador de Unix, primera edición
- Relato personal de Landon Curt Noll sobre las decisiones de POSIX.
- Algoritmos de fecha de bajo nivel compatibles con chrono : algoritmos para convertir entre fechas gregorianas y julianas y el número de días desde el inicio del tiempo Unix.
- Estándares de calendario
- Software relacionado con el tiempo de red
- Sistemas de medición del tiempo
- escalas de tiempo
- Unix
- 1970 en informática