El tiempo Unix o el tiempo Posix (también llamado marca de tiempo Unix ) es una medida de tiempo basada en el número de segundos desde1 st de enero de 1,97000:00:00 UTC , excluyendo los segundos intercalares . Se utiliza principalmente en sistemas que cumplen con el estándar POSIX , incluidos los sistemas tipo Unix , de ahí su nombre. Es la representación POSIX del tiempo.
Para asociar un evento a un número real, basta con utilizar referencias naturales y universales: por ejemplo, las periodicidades de rotación de la Tierra sobre sí misma y alrededor del Sol. Estas periodicidades son suficientes para establecer calendarios , es decir relaciones entre eventos y fechas, aunque sea necesario algún esfuerzo para definir claramente las referencias utilizadas (cada país tiene el suyo, todos adoptados en diferentes momentos); las fechas de estos calendarios son solo números expresados en un sistema de numeración algo complicado que tiene las unidades del día, semana, mes, temporada, año, etc., y el tiempo Posix no es más que una referencia entre otros expresados como un simple número .
Principales sistemas de medición utilizadosEstos son los principales sistemas de medición del tiempo que se han imaginado y utilizado hasta hoy:
Acrónimo | Significado | Definición |
---|---|---|
GMT | Meridiano de Greenwich | Todavía en uso en algunos países por aspectos legales.
Sin embargo, la definición de este sistema de medición es ambigua. Esta es la razón por la que, además de este uso administrativo, es preferible utilizar UTC. |
Utah | Tiempo Universal | Este sistema define el día como la duración media de la rotación de la Tierra alrededor de su eje.
Esta definición plantea algunas dificultades porque la velocidad de esta rotación no es constante, disminuye lentamente bajo el efecto de las mareas y, además, presenta irregularidades impredecibles: la duración de los días UT es muy levemente superior, en promedio, a 86.400 segundos ( número de segundos en 24 horas). La diferencia es del orden de un segundo en uno a tres años. Hay varias versiones de UT: UT0, UT1, UT1R, UT2. Consulte el artículo " Hora universal " para obtener más detalles. |
TAI | Hora atómica internacional | Este sistema se basa en una definición internacional del segundo. Su estándar está compuesto por varios relojes atómicos distribuidos por todo el mundo. La medición del tiempo en este sistema es estrictamente regular a diferencia del anterior para el que su estándar no tiene la misma regularidad. Como resultado, TAI y UT se alejan gradualmente entre sí debido a la desaceleración del segundo.
|
UTC | Hora universal coordinada |
Este sistema es adoptado como base del tiempo civil internacional por un gran número de países. La palabra "coordinada" indica que:
En otras palabras, UTC es idéntico a TAI (tiene su estabilidad y precisión) hasta un número entero de segundos, lo que le permite ceñirse a UT al 0.9 s más cercano; esto es lo que muestra la figura de al lado.
|
Para medir el tiempo, debes elegir un origen:
Es necesario indicar cómo evoluciona este número según el tiempo que pasa:
# | TAI | UTC | TAI - UTC | Posix tiempo | |
---|---|---|---|---|---|
1 | 2009-01-01T00: 00: 30 | 2008-12-31T23: 59: 57 | 33 | 1.230.767.997 | |
2 | 2009-01-01T00: 00: 31 | 2008-12-31T23: 59: 58 | 33 | 1.230.767.998 | |
3 | 2009-01-01T00: 00: 32 | 2008-12-31T23: 59: 59 | 33 | 1.230.767.999 | |
4 | 2009-01-01T00: 00: 33 | 2008-12-31T23: 59: 60 | 33 | 1.230.768.000 | adición de un segundo intercalar |
5 | 2009-01-01T00: 00: 34 | 2009-01-01T00: 00: 00 | 34 | 1.230.768.000 | |
6 | 2009-01-01T00: 00: 35 | 2009-01-01T00: 00: 01 | 34 | 1,230,768,001 | |
7 | 2009-01-01T00: 00: 36 | 2009-01-01T00: 00: 02 | 34 | 1,230,768,002 |
Posix Time no es una representación lineal del tiempo, hay anomalías, como la fila 5 de la tabla anterior.
No hay correspondencia biyectiva entre la hora UTC y la hora Posix; este último no permite representar los segundos intercalares presentes en UTC, como la línea 4 de la tabla anterior: 2008-12-31T23: 59: 60 UTC.
Estas diferentes referencias no deben confundirse (por ejemplo, el año cero de un calendario no comienza a la misma hora que el de otro) y también porque todos estos calendarios deben adaptarse a períodos no múltiples. Entre sí, por ejemplo años bisiestos, o las irregularidades de estas periodicidades. Estas adaptaciones complican un poco los cálculos, dependiendo de la precisión que se busque; por ejemplo, ha transcurrido un año puede ser información suficiente o será necesario tener en cuenta el carácter bisiesto del año para responder la misma pregunta expresada en número de días. Esto significa que tienes que guardar un recuerdo del pasado, el recuerdo de cada segundo que pasa.
En la mayoría de los casos, una simple diferencia en los tiempos de Posix es suficiente, a menos que los dos eventos abarquen uno o más segundos intercalares. Para calcular un retraso exacto en todas las circunstancias, debe tener en cuenta los segundos intercalares.
Sin embargo, la ocurrencia de segundos intercalares es baja, por lo que la probabilidad de cometer tal error es baja; y si a pesar de todo ocurre el caso, entonces la magnitud del error puede ser pequeña, y no hay necesidad de preocuparse por esos segundos intercalares en este caso; la siguiente tabla muestra diferentes ejemplos.
El método para completar una fila de esta tabla es el siguiente:
Al aplicar este método para los tiempos M = 10, 100, 1000 se obtiene la siguiente tabla:
Hora de medir (M) | Probabilidad de error | Magnitud del error |
---|---|---|
10 s | 3,2 × 10 -7 | 10% |
100 s | 3,2 × 10 -6 | 1% |
1000 s | 3,2 × 10 -5 | 0,1% |
En última instancia, si el tiempo para calcular entre los dos eventos de interés es de un año, entonces la probabilidad es del 100% de cometer un error de 3,2 × 10 -8 .
La probabilidad de cometer un error dado y la magnitud de este error varían inversamente entre sí; otra forma de decirlo podría ser decir:
Si esta pareja (probabilidad de cometer un error / magnitud del error) es inaceptable, o si no sabemos cómo evaluar el impacto, entonces seguramente es necesario preguntarse por qué usamos UTC y cuál es la necesidad de precisión necesaria, o prever el uso de tablas que se actualizarán tan pronto como se programe la inserción / eliminación de un segundo intercalar.
Conversión de UTC a hora PosixAparte de las muy raras anomalías mencionadas anteriormente con respecto a los segundos intercalares, es fácil convertir una hora UTC en una hora Posix y viceversa.
Ejemplo: ¿Cuál es la hora de Posix al comienzo del día del 1 st de enero de 2009(fila 5 de la Tabla 1 anterior):
Número de días transcurridos | ||||
---|---|---|---|---|
1.970 | 1 971 | 1997 | 1973 | 3 * 365 + 366 = 1461 |
1.974 | 1 975 | 1,976 | 1997 | 1461 |
1 978 | 1,979 | 1980 | 1981 | 1461 |
mil novecientos ochenta y dos | 1983 | 1984 | 1985 | 1461 |
1.986 | 1987 | 1989 | 1989 | 1461 |
1990 | 1,991 | 1,992 | 1,993 | 1461 |
1994 | 1,995 | 1,996 | 1997 | 1461 |
1,998 | 1,999 | 2.000 | 2.001 | 1461 |
2.002 | 2.003 | 2004 | 2.005 | 1461 |
2.006 | 2.007 | 2.008 | 2 * 365 + 366 = 1096 | |
14 245 |
También hay herramientas que realizan estos cálculos de manera muy simple, como este "script de shell" para convertir un número de segundos desde la era Posix en una fecha:
#!/bin/sh # convertir un nombre de secondes depuis l'époque Posix # en date # exemple: date -u -R --date "1970-01-01 1230768000 seconds" date -u -R --date "1970-01-01 $* seconds" Conversión de una hora Posix a hora UTCEl cálculo inverso no es difícil, y de manera similar, existen herramientas que realizan estos cálculos de manera muy simple, como este script bash para convertir una fecha en un número de segundos desde la época de Posix:
#!/bin/sh # convertir une date (attention au format de l'argument) # en nombre de secondes depuis l'époque Posix # exemple: date --date "2009-01-01 00:00:00+00:00" "+%s" date --date "$*" "+%s"El método más común para leer la hora en Unix es la llamada a la siguiente función que devuelve un valor numérico de tipo " time_t".
time_t time(NULL);Este tipo time_t se usa comúnmente para manipular el tiempo de UNIX, desafortunadamente el estándar POSIX no especifica (claramente) su tamaño:
Tiempo de Unix | UTC | |
---|---|---|
fecha más temprana: -2 31 | −2 147 483 648 | 1901-12-13 Mi 20:45:52 |
Era Unix: 0 | 0 | 1970-01-01 T 00:00:00 |
fecha más temprana: 2 31 -1 | 2,147,483,647 | 2038-01-19 Martes 03:14:07 |
Esta imposibilidad de representación no cuestiona necesariamente el funcionamiento de la propia máquina, es decir, el funcionamiento de su sistema operativo, sino el funcionamiento de sus aplicaciones y su interoperabilidad con otras máquinas. De hecho, no es suficiente que una máquina sepa gestionar este límite localmente, sino que también es necesario que todas las máquinas que están conectadas a ella sean capaces de gestionar este límite y este de la misma forma.
Pueden surgir varios casos:
Los sistemas Unix generalmente mantienen un contador cuya resolución es más fina que la segunda. Se puede acceder a este tiempo llamando a la siguiente función:
int gettimeofday(struct timeval *tv, NULL);El valor numérico devuelto por esta función se almacena en la variable “ struct timeval *tv ” definida de la siguiente manera:
struct timeval { int tv_sec; /* secondes */ int tv_usec; /* microsecondes de 0 à 999999 */ };El uso de esta resolución inferior a un segundo plantea la pregunta de qué sucede cuando se suma o se resta un segundo intercalar. Parece que este punto es responsabilidad del sistema operativo. En ausencia de una especificación clara, son posibles varios escenarios dependiendo del sistema operativo considerado. Los tres ejemplos siguientes muestran las tres categorías de casos que parecen las más representativas, solo tratan el aspecto de inserción de un segundo intercalar pero podrían adaptarse fácilmente al caso de eliminación:
# | UTC | tv_sec | tv_usec | |
---|---|---|---|---|
4 | 2008-12-31T23: 59: 60.000 | 1.230.768.000 | 0 | |
2008-12-31T23: 59: 60.500 | 1.230.768.000 | 500.000 | ||
5 | 2009-01-01T00: 00: 00.000 | 1.230.768.000 | 0 | el tiempo se ajustó repentinamente |
2009-01-01T00: 00: 00.500 | 1.230.768.000 | 500.000 | ||
6 | 2009-01-01T00: 00: 01.000 | 1,230,768,001 | 0 |
# | UTC | tv_sec | tv_usec | |
---|---|---|---|---|
4 | 2008-12-31T23: 59: 60.000 | 1.230.768.000 | 0 | |
2008-12-31T23: 59: 60.500 | 1.230.768.000 | 0 | hora congelada | |
5 | 2009-01-01T00: 00: 00.000 | 1.230.768.000 | 0 | hora congelada |
2009-01-01T00: 00: 00.500 | 1.230.768.000 | 500.000 | ||
6 | 2009-01-01T00: 00: 01.000 | 1,230,768,001 | 0 |
# | UTC | tv_sec | tv_usec | |
---|---|---|---|---|
4 | 2008-12-31T23: 59: 60.000 | 1.230.768.000 | 0 | |
2008-12-31T23: 59: 60.500 | 1.230.768.000 | 250.000 | hora más lenta | |
5 | 2009-01-01T00: 00: 00.000 | 1.230.768.000 | 500.000 | hora más lenta |
2009-01-01T00: 00: 00.500 | 1.230.768.000 | 750.000 | hora más lenta | |
6 | 2009-01-01T00: 00: 01.000 | 1,230,768,001 | 0 |
La idea de utilizar el tiempo atómico internacional ya ha sido propuesta y defendida por muchas personas, pero este no es el significado que le ha dado la historia, la elección elegida fue la que hoy está congelada por el estándar POSIX.
Daniel J. Bernstein también ha escrito artículos y software para el uso de TAI en sistemas similares a UNIX.
El gigasegundo de Unix se refiere a la hora 10 9 de Unix , que representa la9 de septiembre de 2001.