Programozók tévhitei a Unix időről

bocsánatot kérek Patrick McKenzie.

Tegnap Danny Megkérdeztem néhány érdekességet a Unix időről, és eszembe jutott, hogy néha teljesen intuitív módon működik.

Ez a három tény rendkívül ésszerűnek és logikusnak tűnik, nem?

  1. A Unix idő az 1. január 1970. 00:00:00 UTC óta eltelt másodpercek száma.
  2. Ha pontosan egy másodpercet vár, a Unix idő pontosan egy másodperccel változik.
  3. A Unix idő soha nem mozdul visszafelé.

Ezek közül egyik sem igaz.

De nem elég egyszerűen azt mondani: „Ebből semmi sem igaz”, magyarázat nélkül. miért. Lásd alább a magyarázatokat. De ha magad akarsz gondolkodni, ne görgess az óra képe mellett!

Programozók tévhitei a Unix időről
Asztali óra az 1770-es évekből. Összeállította: John Leroux. Tól től Üdvözöljük a gyűjtemények. Licenc alatt jelent meg CC BY

Mindhárom tévhitnek egy oka van: szökőmásodpercek. Ha nem ismeri a szökőmásodperceket, íme egy gyors referencia:

Az UTC időt két tényező határozza meg:

  • Nemzetközi Atomidő: A világ több száz órájának átlagos leolvasása. A másodikat egy atom elektromágneses tulajdonságaival mérhetjük, és ez a tudomány által ismert legpontosabb időmérés.
  • Világ idő, a Föld saját tengelye körüli forgása alapján. Egy teljes forradalom egy nap.

A probléma az, hogy ez a két szám nem mindig egyezik. A Föld forgása nem egyenletes – fokozatosan lelassul, így az egyetemes idő szerint hosszabbodnak a nappalok. Másrészt az atomórák ördögien pontosak és évmilliókon át állandóak.

Ha két idő kiesik a szinkronból, a rendszer hozzáad egy másodikat, vagy eltávolítja az UTC-t, hogy újra szinkronba kerüljön. Szolgálat 1972 óta IERS (amely ezt az esetet futtatja) hozzáadott 27 extra másodpercet. Az eredmény 27 UTC nap 86 401 másodperces időtartammal. Elméletileg egy 86 399 másodperces (mínusz egy) nap lehetséges. Mindkét lehetőség ellentmond a Unix idő alapfeltevésének.

A Unix idő azt feltételezi, hogy minden nap pontosan 86 400 másodpercig tart (60 × 60 × 24 = 86 400), további másodpercek nélkül. Ha ilyen ugrás történik, akkor a Unix idő vagy egy másodpercet ugrik, vagy két másodpercet számol egyben. 2019-ben 27 szökőmásodperc hiányzik.

Tévhiteinket tehát az alábbiak szerint kell kiegészíteni:

  • A Unix idő az 1. január 1970. 00:00:00 UTC óta eltelt másodpercek száma mínusz szökőmásodperc.
  • Ha pontosan egy másodpercet vár, a Unix idő pontosan egy másodperccel változik, hacsak nem távolították el a szökőmásodpercet.

    Ez idáig a gyakorlatban soha nem távolították el a másodperceket (és a Föld forgásának lassulása miatt ez nem valószínű), de ha valaha is megtörténne, az azt jelentené, hogy az UTC-nap egy másodperccel rövidülne. Ebben az esetben az UTC utolsó másodpercét (23:59:59) el kell dobni.

    Minden Unix napon ugyanannyi másodperc van, így a lerövidített nap utolsó Unix-másodperce nem fog megfelelni egyetlen UTC-időnek sem. Így néz ki negyedmásodperces időközönként:

    Programozók tévhitei a Unix időről

    Ha 23:59:58:00 UTC-kor kezdi, és vár egy másodpercet, a Unix idő két UTC másodperccel lép előre, és a Unix 101 időbélyeg nem lesz hozzárendelve senkihez.

  • A Unix idő soha nem mehet vissza, amíg hozzáadódik egy szökőmásodperc.

    Ez a gyakorlatban már 27 alkalommal megtörtént. Az UTC nap végén 23:59:60-kor egy további másodperc kerül hozzáadásra. A Unixnak ugyanannyi másodperce van egy napban, így nem tud plusz másodpercet hozzáadni – ehelyett az utolsó másodpercben meg kell ismételnie a Unix időbélyegeit. Így néz ki negyedmásodperces időközönként:

    Programozók tévhitei a Unix időről

    Ha 23:59:60.50-kor kezd, és vár egy fél másodpercet, akkor a Unix idő visszajön fél másodperccel, a Unix 101 időbélyegzője pedig két UTC másodpercnek felel meg.

Valószínűleg nem ezek az egyedüli furcsaságok a Unix időkben – csak az jutott eszembe tegnap.

Idő - nagyon furcsa dolog.

Forrás: will.com

Hozzászólás