Concepcions errònies dels programadors sobre el temps Unix

ho sento Patrick McKenzie.

Ahir Danny Vaig preguntar sobre alguns fets interessants sobre el temps Unix, i vaig recordar que de vegades funciona de manera totalment poc intuïtiva.

Aquests tres fets semblen extremadament raonables i lògics, no?

  1. L'hora Unix és el nombre de segons des de l'1 de gener de 1970 a les 00:00:00 UTC.
  2. Si espereu exactament un segon, el temps Unix canviarà exactament un segon.
  3. El temps Unix no es mou mai cap enrere.

Res d'això és cert.

Però no n'hi ha prou amb dir simplement: "Res d'això és cert", sense explicar-ho. per què. Vegeu a continuació les explicacions. Però si voleu pensar per vosaltres mateixos, no us desplaceu més enllà de la imatge del rellotge!

Concepcions errònies dels programadors sobre el temps Unix
Rellotge de taula de la dècada de 1770. Compilat per John Leroux. Des de Col·leccions de benvinguda. Publicat sota llicència CC BY

Les tres idees errònies tenen una raó: segons intercalats. Si no esteu familiaritzat amb els segons intercalats, aquí teniu una referència ràpida:

L'hora UTC està determinada per dos factors:

  • Hora Atòmica Internacional: lectura mitjana de centenars de rellotges atòmics arreu del món. Podem mesurar el segon per les propietats electromagnètiques d'un àtom, i aquesta és la mesura més precisa del temps que coneix la ciència.
  • Hora del món, basat en la rotació de la Terra al voltant del seu propi eix. Una revolució completa és un dia.

El problema és que aquests dos números no sempre coincideixen. La rotació de la Terra no és coherent: s'alenteix gradualment, de manera que els dies en el Temps Universal es fan més llargs. D'altra banda, els rellotges atòmics són diabòlicament precisos i constants durant milions d'anys.

Quan dues vegades no es sincronitzen, s'afegeix o s'elimina un segon de l'UTC per tornar-los a sincronitzar. Des de 1972 servei IERS (que executa aquest cas) va afegir 27 segons addicionals. El resultat va ser de 27 dies UTC amb una durada de 86 segons. Teòricament, és possible un dia amb una durada de 401 segons (menys un). Ambdues opcions contradiuen el supòsit fonamental del temps Unix.

El temps Unix suposa que cada dia dura exactament 86 segons (400 × 60 × 60 = 24), sense cap segon addicional. Si es produeix aquest salt, el temps Unix salta un segon o compta dos segons en un. A partir del 86, li falten 400 segons de salt.

Per tant, les nostres idees errònies s'han de complementar de la següent manera:

  • L'hora Unix és el nombre de segons des de l'1 de gener de 1970 00:00:00 UTC menys segons intercalats.
  • Si espereu exactament un segon, el temps Unix canviarà exactament un segon, tret que s'hagi eliminat el segon intercalat.

    Fins ara, els segons mai s'han eliminat a la pràctica (i la desacceleració de la rotació de la Terra fa que això sigui poc probable), però si mai passava, significaria que el dia UTC es tornaria un segon més curt. En aquest cas, l'últim segon de UTC (23:59:59) es descarta.

    Cada dia Unix té el mateix nombre de segons, de manera que l'últim segon Unix d'un dia reduït no correspondrà a cap hora UTC. Aquí teniu el que sembla, en intervals de quart de segon:

    Concepcions errònies dels programadors sobre el temps Unix

    Si comenceu a les 23:59:58:00 UTC i espereu un segon, l'hora Unix avançarà dos segons UTC i la marca de temps Unix 101 no s'assignarà a ningú.

  • El temps Unix mai pot tornar enrere, fins que s'afegeix un segon intercalat.

    Això ja ha passat 27 vegades a la pràctica. Al final del dia UTC, s'afegeix un segon addicional a les 23:59:60. Unix té el mateix nombre de segons en un dia, de manera que no pot afegir un segon addicional; en canvi, ha de repetir les marques de temps d'Unix durant l'últim segon. Aquí teniu el que sembla, en intervals de quart de segon:

    Concepcions errònies dels programadors sobre el temps Unix

    Si comenceu a les 23:59:60.50 i espereu mig segon, l'hora Unix torna mig segon i la marca de temps d'Unix 101 correspon a dos segons UTC.

Probablement aquestes no són les úniques rareses dels temps d'Unix, només el que vaig recordar ahir.

Temps - molt cosa estranya.

Font: www.habr.com

Afegeix comentari