Conceptos erróneos de los programadores sobre la hora Unix

Disculparse Patricio McKenzie.

Ayer Danny Pregunté sobre algunos datos interesantes sobre el tiempo de Unix y recordé que a veces funciona de forma completamente poco intuitiva.

Estos tres hechos parecen sumamente razonables y lógicos, ¿no?

  1. El tiempo Unix es el número de segundos desde el 1 de enero de 1970 a las 00:00:00 UTC.
  2. Si espera exactamente un segundo, la hora de Unix cambiará exactamente un segundo.
  3. El tiempo de Unix nunca retrocede.

Nada de esto es verdad.

Pero no basta con decir simplemente: “Nada de esto es cierto”, sin dar explicaciones. por qué. Consulte las explicaciones a continuación. Pero si quieres pensar por ti mismo, ¡no pases de la imagen del reloj!

Conceptos erróneos de los programadores sobre la hora Unix
Reloj de mesa de la década de 1770. Compilado por John Leroux. De Colecciones de bienvenida. Publicado bajo licencia CC BY

Los tres conceptos erróneos tienen una razón: segundos intercalares. Si no está familiarizado con los segundos intercalares, aquí tiene una referencia rápida:

La hora UTC está determinada por dos factores:

  • Hora atómica internacional: Lecturas promedio de cientos de relojes atómicos en todo el mundo. Podemos medir el segundo mediante las propiedades electromagnéticas de un átomo, y esta es la medición del tiempo más precisa conocida por la ciencia.
  • Hora mundial, basado en la rotación de la Tierra alrededor de su propio eje. Una revolución completa es un día.

El problema es que estos dos números no siempre coinciden. La rotación de la Tierra no es constante: se ralentiza gradualmente, por lo que los días en el Tiempo Universal se vuelven más largos. Por otro lado, los relojes atómicos son endiabladamente precisos y constantes durante millones de años.

Cuando dos horas no están sincronizadas, se agrega o elimina un segundo de UTC para volver a sincronizarlas. Desde 1972 servicio IERS (que ejecuta este caso) agregó 27 segundos adicionales. El resultado fueron 27 días UTC con una duración de 86 segundos. En teoría, es posible un día con una duración de 401 segundos (menos uno). Ambas opciones contradicen el supuesto fundamental del tiempo Unix.

El tiempo Unix supone que cada día dura exactamente 86 segundos (400 × 60 × 60 = 24), sin segundos adicionales. Si se produce tal salto, entonces el tiempo de Unix salta un segundo o cuenta dos segundos en uno. A partir de 86, le faltan 400 segundos intercalares.

Por lo tanto, nuestros conceptos erróneos deben complementarse de la siguiente manera:

  • El tiempo Unix es el número de segundos desde el 1 de enero de 1970 a las 00:00:00 UTC menos segundos intercalares.
  • Si espera exactamente un segundo, la hora de Unix cambiará exactamente un segundo, a menos que se haya eliminado el segundo intercalar.

    Hasta ahora, en la práctica nunca se han eliminado los segundos (y la desaceleración de la rotación de la Tierra significa que esto es poco probable), pero si alguna vez sucediera, significaría que el día UTC se acortaría un segundo. En este caso, se descarta el último segundo de UTC (23:59:59).

    Cada día Unix tiene la misma cantidad de segundos, por lo que el último segundo Unix de un día acortado no corresponderá a ninguna hora UTC. Así es como se ve, en intervalos de un cuarto de segundo:

    Conceptos erróneos de los programadores sobre la hora Unix

    Si comienza a las 23:59:58:00 UTC y espera un segundo, la hora Unix avanzará dos segundos UTC y la marca de tiempo Unix 101 no se asignará a nadie.

  • El tiempo de Unix nunca podrá volver atrás. hasta que se agregue un segundo intercalar.

    Esto ya ha ocurrido 27 veces en la práctica. Al final del día UTC, se añade un segundo adicional a las 23:59:60. Unix tiene la misma cantidad de segundos en un día, por lo que no puede agregar un segundo adicional; en cambio, tiene que repetir las marcas de tiempo de Unix para el último segundo. Así es como se ve, en intervalos de un cuarto de segundo:

    Conceptos erróneos de los programadores sobre la hora Unix

    Si comienzas a las 23:59:60.50 y esperas medio segundo, el tiempo Unix vuelve en medio segundo, y la marca de tiempo de Unix 101 corresponde a dos segundos UTC.

Probablemente estas no sean las únicas rarezas de la época de Unix, solo lo que recordé ayer.

Tiempo - muy cosa extraña.

Fuente: habr.com

Añadir un comentario