Ranghugmyndir forritara um Unix Time

ég biðst afsökunar Patrick McKenzie.

Gær Danny Ég spurði um nokkrar áhugaverðar staðreyndir um Unix tíma og ég mundi að stundum virkar það algjörlega ósjálfrátt.

Þessar þrjár staðreyndir virðast afar sanngjarnar og rökréttar, er það ekki?

  1. Unix tími er fjöldi sekúndna frá 1. janúar 1970 00:00:00 UTC.
  2. Ef þú bíður nákvæmlega eina sekúndu mun Unix tíminn breytast um nákvæmlega eina sekúndu.
  3. Unix tími hreyfist aldrei afturábak.

Ekkert af þessu er satt.

En það er ekki nóg að segja einfaldlega: „Ekkert af þessu er satt,“ án þess að útskýra það. hvers vegna. Sjá skýringar hér að neðan. En ef þú vilt hugsa sjálfur skaltu ekki fletta framhjá myndinni af klukkunni!

Ranghugmyndir forritara um Unix Time
Borðklukka frá 1770. Samið af John Leroux. Frá Velkomin söfn. Gefið út með leyfi CC BY

Allar þrjár ranghugmyndirnar hafa eina ástæðu: hlaupsekúndur. Ef þú þekkir ekki hlaupsekúndur, hér er stutt tilvísun:

UTC tími ræðst af tveimur þáttum:

  • Alþjóðlegur atómtími: Meðaltal úr hundruðum atómklukka um allan heim. Við getum mælt annað með rafsegulfræðilegum eiginleikum atóms og þetta er nákvæmasta tímamæling sem vísindin þekkja.
  • Heimstími, byggt á snúningi jarðar um eigin ás. Ein full bylting er einn dagur.

Vandamálið er að þessar tvær tölur passa ekki alltaf saman. Snúningur jarðar er ekki samkvæmur - það hægir smám saman á, þannig að dagarnir í alheimstímanum verða lengri. Aftur á móti eru atómklukkur djöfullega nákvæmar og stöðugar yfir milljónir ára.

Þegar tvö skipti falla úr samstillingu er annað bætt við eða fjarlægð úr UTC til að koma þeim aftur í samstillingu. Síðan 1972 þjónustu IERS (sem rekur þetta mál) bætti við 27 aukasekúndum. Niðurstaðan var 27 UTC dagar með lengd 86 sekúndu. Fræðilega séð er dagur sem tekur 401 sekúndur (mínus ein) mögulegur. Báðir valkostir stangast á við grundvallarforsendur Unix tíma.

Unix tíminn gerir ráð fyrir að hver dagur vari nákvæmlega 86 sekúndur (400 × 60 × 60 = 24), án þess að auka sekúndur. Ef slíkt stökk á sér stað, þá hoppar Unix-tími annað hvort eina sekúndu eða telur tvær sekúndur í einni. Frá og með 86 vantar 400 hlaupsekúndur.

Svo þarf að bæta við ranghugmyndum okkar sem hér segir:

  • Unix tími er fjöldi sekúndna frá 1. janúar 1970 00:00:00 UTC mínus hlaupsekúndur.
  • Ef þú bíður nákvæmlega eina sekúndu mun Unix tími breytast um nákvæmlega eina sekúndu, nema hlaupsekúndu hafi verið fjarlægð.

    Hingað til hafa sekúndur aldrei verið fjarlægðar í reynd (og hægari á snúningi jarðar þýðir að þetta er ólíklegt), en ef það gerðist einhvern tímann myndi það þýða að UTC dagurinn yrði einni sekúndu styttri. Í þessu tilviki er síðustu sekúndu UTC (23:59:59) hent.

    Hver Unix dagur hefur sama fjölda sekúndna, þannig að síðasta Unix sekúnda stytts dags mun ekki samsvara neinum UTC tíma. Svona lítur það út, með korter-sekúndu millibili:

    Ranghugmyndir forritara um Unix Time

    Ef þú byrjar klukkan 23:59:58:00 UTC og bíður í eina sekúndu mun Unix tíminn fara um tvær UTC sekúndur og Unix 101 tímastimplinum verður ekki úthlutað til neins.

  • Unix tími getur aldrei farið aftur, þar til hlaupsekúndu er bætt við.

    Þetta hefur þegar gerst 27 sinnum í reynd. Í lok UTC dagsins bætist sekúnda við kl. 23:59:60. Unix er með sama fjölda sekúndna á sólarhring, þannig að það getur ekki bætt við sekúndu til viðbótar - þess í stað þarf það að endurtaka Unix tímastimpilinn fyrir síðustu sekúndu. Svona lítur það út, með korter-sekúndu millibili:

    Ranghugmyndir forritara um Unix Time

    Ef þú byrjar klukkan 23:59:60.50 og bíður í hálfa sekúndu, Unix tíminn kemur aftur um hálfa sekúndu og Unix 101 tímastimpillinn samsvarar tveimur UTC sekúndum.

Þetta eru sennilega ekki einu furðuhlutirnir í Unix-tímanum - bara það sem ég mundi í gær.

Tími - mjög skrítinn hlutur.

Heimild: www.habr.com

Bæta við athugasemd