Mylné predstavy programátorov o Unixovom čase

ospravedlňujem sa Patrick McKenzie.

včera Danny Pýtal som sa na pár zaujímavých faktov o Unixovom čase a spomenul som si, že niekedy to funguje úplne neintuitívne.

Tieto tri fakty sa zdajú byť mimoriadne rozumné a logické, však?

  1. Unixový čas je počet sekúnd od 1. januára 1970 00:00:00 UTC.
  2. Ak počkáte presne jednu sekundu, čas Unixu sa zmení presne o jednu sekundu.
  3. Unixový čas sa nikdy neposúva dozadu.

Nič z toho nie je pravda.

Nestačí však jednoducho povedať: „Nič z toho nie je pravda,“ bez vysvetlenia. prečo. Vysvetlenia nájdete nižšie. Ale ak chcete myslieť sami, neskrolujte za obrázok hodín!

Mylné predstavy programátorov o Unixovom čase
Stolové hodiny zo 1770. rokov XNUMX. storočia. Zostavil John Leroux. Od Uvítacie kolekcie. Publikované v licencii CC BY

Všetky tri mylné predstavy majú jeden dôvod: prestupné sekundy. Ak nepoznáte prestupné sekundy, tu je rýchly odkaz:

Čas UTC je určený dvoma faktormi:

  • Medzinárodný atómový čas: Priemerné hodnoty zo stoviek atómových hodín po celom svete. Druhý môžeme merať elektromagnetickými vlastnosťami atómu, a to je najpresnejšie meranie času, aké veda pozná.
  • svetový čas, založený na rotácii Zeme okolo vlastnej osi. Jedna úplná revolúcia je jeden deň.

Problém je, že tieto dve čísla sa nie vždy zhodujú. Rotácia Zeme nie je konzistentná – postupne sa spomaľuje, takže dni svetového času sa predlžujú. Na druhej strane, atómové hodiny sú čertovsky presné a konštantné po milióny rokov.

Keď dva časy vypadnú zo synchronizácie, sekunda sa pridá alebo odstráni z UTC, aby sa znova zosynchronizovali. Služba od roku 1972 IERS (v tomto prípade) pridal 27 sekúnd navyše. Výsledkom bolo 27 dní UTC s trvaním 86 401 sekúnd. Teoreticky je možný deň s trvaním 86 399 sekúnd (mínus jedna). Obe možnosti sú v rozpore so základným predpokladom unixového času.

Unixový čas predpokladá, že každý deň trvá presne 86 400 sekúnd (60 × 60 × 24 = 86 400) bez akýchkoľvek ďalších sekúnd. Ak k takémuto skoku dôjde, potom Unixový čas buď poskočí o jednu sekundu, alebo počíta dve sekundy za jednu. Od roku 2019 mu chýba 27 prestupných sekúnd.

Takže naše mylné predstavy treba doplniť takto:

  • Unixový čas je počet sekúnd od 1. januára 1970 00:00:00 UTC mínus prestupné sekundy.
  • Ak počkáte presne jednu sekundu, čas Unixu sa zmení presne o jednu sekundu, pokiaľ nebola odstránená prestupná sekunda.

    Až doteraz sa sekundy v praxi nikdy neodstránili (a spomalenie rotácie Zeme znamená, že je to nepravdepodobné), ale ak by sa to niekedy stalo, znamenalo by to, že deň UTC by sa skrátil o jednu sekundu. V tomto prípade sa zahodí posledná sekunda UTC (23:59:59).

    Každý Unixový deň má rovnaký počet sekúnd, takže posledná Unixová sekunda skráteného dňa nebude zodpovedať žiadnemu času UTC. Takto to vyzerá v štvrťsekundových intervaloch:

    Mylné predstavy programátorov o Unixovom čase

    Ak začnete o 23:59:58:00 UTC a počkáte jednu sekundu, čas Unixu sa posunie o dve sekundy UTC a časová pečiatka Unix 101 nebude pridelená nikomu.

  • Unixový čas sa nikdy nedá vrátiť späť, kým sa nepridá skoková sekunda.

    V praxi sa tak stalo už 27-krát. Na konci dňa UTC sa pridá ďalšia sekunda o 23:59:60. Unix má rovnaký počet sekúnd za deň, takže nemôže pridať ďalšiu sekundu - namiesto toho musí opakovať časové značky Unixu na poslednú sekundu. Takto to vyzerá v štvrťsekundových intervaloch:

    Mylné predstavy programátorov o Unixovom čase

    Ak začnete o 23:59:60.50 a počkáte pol sekundy, čas Unix vracia sa o pol sekundy a časová značka Unix 101 zodpovedá dvom sekundám UTC.

Toto pravdepodobne nie sú jediné zvláštnosti z čias Unixu - len to, čo som si spomenul včera.

čas - veľmi zvláštna vec.

Zdroj: hab.com

Pridať komentár