Unix-idő és az ISO 8601 írásmód
SI-n kívüli egység · mennyiség: egy időpont mint egész számú másodperc 1970 óta
2038. január 19-én, világidő szerint három óra tizennégy perc hét másodperckor egy harminckét bit széles másodpercszámláló eléri a 2 147 483 647-et — a legnagyobb számot, amelyet befogadni képes. A következő ütés felemeli a legfelső bitet, és ugyanaz a kettes szó immár negatívként olvasódik: azok az órák, amelyek éppen ezzel a számlálással őrzik az időt, nem 2038-ban, hanem 1901 decemberében találják magukat. Távoli jövő furcsasága ez nem — egy ipari vezérlő vagy egy vízóra tovább szolgál, mint az a tizenkét év, ami hátravan.
A számlálás rendkívül egyszerűen épül fel: a másodpercek egymás után futnak 1970. január elseje éjfelétől, és egy nap mindig pontosan 86 400 másodpercet tartalmaz benne. Éppen ez az egyszerűség mindkét sajátosságának forrása. Egyfelől a számból azonnal következik a naptári dátum és fordítva, úgyhogy minden eseménynapló, minden adatbázis és minden fájlrendszer vele vezeti az időt. Másfelől szökőmásodpercet ilyen számlálásban egyáltalán nem lehet kifejezni, ami azt jelenti, hogy nevével ellentétben nem másodperceket számoz, hanem napokat törtrészeikkel, és valójában az UTC-írásmód lineáris függvénye, nem pedig az eltelt idő számlálója.
01 · Meghatározás
A Unix-idő azoknak a másodperceknek a száma, amelyek 1970. január elseje éjfele óta egyeztetett világidő szerint elteltek, feltéve, hogy minden nap pontosan 86 400 másodpercet tart. Az ISO 8601 írásmód ugyanezt másként mondja ki: naptári dátummal, napszakkal és a kezdő délkörtől való eltolás megadásával, a mezők szigorúan a durvától a finomig futva.
A 86 400 másodpercre vonatkozó kikötés nem apróság, hanem a meghatározás leglényegesebb pontja. A szökőmásodpercet, amelyet a Föld forgásának szolgálata hirdet ki, a számlálás befogadni nem tudja, ezért a beszúrás pillanatában a rendszer vagy kétszer ismétli ugyanazt az értéket, vagy visszaállítja az órát. Ebből fontos dolog következik: két unix-szám különbsége nem azoknak a másodperceknek a száma, amelyek két esemény között valóban elteltek, ha közéjük szökőmásodperc esett — az atomi skálától való eltérés már huszonhét másodpercre nőtt.
A határ ellenben nem a meghatározástól függ, hanem a tárolás szélességétől. Harminckét előjeles bit a legnagyobb értékként a 2 147 483 647-et adja, amely 2038. január 19-re esik; a következő növekmény a legfelső bitet egyre állítja, és a számot negatívvá teszi, az órát 1901. december 13-ra vetve vissza. Hatvannégy bit kétszázkilencvenkét milliárd évvel tolja előre a határt, de az egész milliárdodmásodpercek ugyanazon a hatvannégy bit-en már 2262-ben elfogynak.
A szabvány szerinti írásmód más feladatot old meg — a cserét, nem a tárolást —, és ezért olyan dolgok számítanak benne, amelyek a számnak egyáltalán nincsenek: az órányi eltolás, a dátum és az idő közötti elválasztó, és az a szabály, hogy azonos hosszúságú karakterláncoknál a betűrend egybeesik az időrenddel. Éppen ez az utóbbi tulajdonság tette a formátumot a rendezés alapjává a fájlnevekben és a naplókban.
Vezesse az időt a csúszkával, és nézze, hogyan telik meg a tároló: a bitek jobbról balra gyulladnak ki, és amíg a legfelső, az előjelé, sötét marad, a szám pozitív, a dátum pedig nő. Amint a számláló túllépi a 2 147 483 647-et, a legfelső bit vörösen lobban, az egész szám negatívvá válik, az óra pedig 1901-be ugrik.
A zöld egyenes az atomi skála, ahol minden másodperc valóban másodperc. A vörös lépcsős a Unix-idő, amely minden beszúrásnál kétszer adja ki ugyanazt a bélyeget, amitől a vonal helyben megáll. Az eltérés már huszonhét másodperc, és nő, ezért a számlálás naptári dátumra jó, de tartamok mérésére a fizikában nem.
02 · Átszámítás
Adjon meg időbélyeget vagy dátumot
A számlálás minden többszöröse között — másodpercek, ezred-, milliomod- és milliárdodmásodpercek — az átváltások pontosak, minthogy csak egy szorzóban különböznek. Közelítő egyetlen sor: az atomi skálára való átváltás megkívánja tudni, hány szökőmásodperc gyűlt össze az adott pillanatig.
A szabvány szerinti karakterlánc elemzését a lap a bővített írásmódban, Z betűvel végzi; az elválasztók nélküli alapalak a finom beállításokba került.
A 2038-as év gondja nem a szabványban rejlik, hanem a vasban és a régi kódban: harminckét bites bélyegek ülnek a mérőórák belső programjában, az ipari vezérlőkben, a fájlrendszerek formátumaiban és az adatbázisokban, ahol a mezőt már négy bájttal jelentették ki. A típust a forrásokban megváltoztatni elég könnyű; több millió telepített készüléken végigmenni a hátralévő tizenkét évben ugyanolyan fajta feladat, mint amilyen a 2000. év előtt állt.
| Érték | Megjegyzés | ||
|---|---|---|---|
| {u} | {name} | {value} | {note} |
03 · Nagyságrendek
logaritmikus skála: a másodperctől a hatvannégy bit határáig04 · Mérőeszközök
Mivel látják el időbélyeggel az eseményt
Külön lapka elemmel, amely a számlálást vezeti, amíg a készülék ki van kapcsolva. Rendszerint nem unix-bélyeget őriz, hanem a naptár mezőit külön-külön, és az év mezőjének szélessége a sajátja, úgyhogy régi paneleknél a 2038-ról szóló beszélgetés azzal a kérdéssel kezdődik, hányig számol maga a lapka.
Az NTP-eljárás a gép óráját néhány ezredmásodperc pontossággal a közös időhöz igazítja, és ugyanő figyelmeztet a beszúrásra külön jelzéssel egy nappal korábban. Saját határa neki is van, és az hamarabb jön: a számlálás 1900-tól fut előjel nélküli harminckét bit-en, és 2036 februárjában csordul túl.
A naplóba a bélyeget vagy számmal, vagy a szabvány szerinti karakterlánccal írják, és a második pontosan egy okból jobb: azonos hosszúságú karakterláncoknál a betűrend egybeesik az időrenddel, úgyhogy a bejegyzések a dátum elemzése nélkül rendeződnek. Éppen ezért terjedt el a formátum jóval a számítástechnikán túl.
Egy készülék 2038-ra való felkészültségét egyetlen módon lehet próbára tenni — az óráját a végzetes határon túlra állítani, és megnézni, mi lesz a naplókkal, a tanúsítványokkal és az időközök számításával. Így találtak már hibákat a számlázásban, a beléptető rendszerekben és a kulcsok érvényességi idejében, ahol a jövőbeli dátum összeadással készül, és jóval a határ előtt túlcsordul.
05 · Írásszabályok
A durvától a finomig, és mindig az eltolással
A szabvány a mezők csökkenő sorrendjét kívánja, az év négy jegyét, a kötőjelet a dátum elválasztójaként és a T betűt az idő előtt; az órányi eltolást vagy a Z betűvel adják meg a kezdő délkörre, vagy plusz-mínusz órákként és percekként. A unix-bélyeget egész számmal írják, a nagyságrendek elválasztása nélkül, és a többszöröst mindig meg kell adni, minthogy egy ezres szorzó választja el a másodperceket az ezredmásodpercektől, és a szám nagysága szerint könnyen összetéveszthetők.
Az első írásmódot különböző országokban különbözőképpen olvassák, és ezért adatcserében megengedhetetlen. A második elhagyja az elválasztót is, az eltolást is, úgyhogy az időpont mindkét irányban egy nappal határozatlan marad. A harmadik elveszíti a kezdő nullákat, amitől a karakterláncok betűrendben rendeződni megszűnnek — márpedig éppen ezért a tulajdonságért becsülik a formátumot. A negyedik egyenlőségjelet tesz a unix-számlálás és az atomi skála közé, holott közöttük huszonhét másodpercnyi felgyűlt beszúrás fekszik.
06 · Szomszédos egységek
Mellette állnak mindazok a számlálások, amelyek ugyanazon elv szerint épültek, csak más kezdettől: az NTP-idő 1900-tól, a julián dátum időszámításunk előtt 4713 delétől, a műholdas rendszer skálája 1980 januárjától. Csak korszakban és egységben különböznek, ezért egy állandó kivonásával váltanak át.
előjeles másodpercek
a határa már 2036-ra esik
a szökőmásodpercek becsületesen számolva
A Simetrium adatlapjai közül mellette áll a julián dátum, ahonnan az átszámítási állandó való, az UTC, a TAI és az UT1 skála, amelyek a hiányzó szökőmásodperceket megmagyarázzák, másodperc a számlálás egységeként, és a bit, amelynek szélessége a határt megszabja.
07 · Történeti rész
Bithiányból választott korszak
Az első Unix-kézikönyvben az időt a másodperc hatvanad részeiben számolták 1971 elejétől, és harminckét bit-en ilyen számlálás alig bő két évet fogadott be. Olyan gyorsan fogytak el, hogy a korszakot a rendszer minden kiadásánál el kellett volna tolni, és a másodperc törtrészeiről az egészek javára lemondtak.
Az egész másodpercekre áttérve a fejlesztők százharminchat évnyi tartalékot nyertek, és a kezdetet kényelemből választhatták, nem szükségből. 1970. január elsejét vették — a legközelebbi kerek dátumot a múltban, ameddig a gépi feljegyzések amúgy sem értek —, és azóta egyszer sem változtatták meg, jóllehet a rendszert nem egyszer írták újra alapjaitól.
A Nemzetközi Szabványügyi Szervezet a szétváló nemzeti formátumokat egybe vonta, és egyszerű szabályt tett az alapjává: a mezők a durvától a finomig futnak, mind kezdő nullákkal. A mellékhatás fontosabbnak bizonyult a szándéknál — az ilyen karakterláncok számként rendeződnek, és a formátum elterjedt a fájlnevekben, a naplókban és a csereeljárásokban.
Az asztali és a kiszolgálórendszerek régen áttértek hatvannégy bit-re, és ott a határ minden ésszerű látóhatáron túlra tolódott. A veszély másutt maradt: a húszéves élettartamú műszerek belső programjában, az olyan fájlformátumokban, ahol a mező négy bájttal van kijelentve, és a jövőbeli határidők számításában, amelyek már ma túlcsordulnak, mihelyt a mai dátumhoz tizenöt évet adnak.
Számlálás, amely nevével ellentétben nem másodperceket számol
A Unix-idő meghatározása a másodpercek számlálásának hangzik, ám a napi kerek 86 400 másodperc követelménye mássá teszi: az UTC-írásmód lineáris függvényévé, nem pedig az eltelt idő mértékévé. Valahányszor a Föld forgásának szolgálata beszúrást hirdet, a számlálásnak kétszer kell ismételnie ugyanazt az értéket, vagy vissza kell ugrania, és két bélyeg különbségéből éppen az a másodperc vész el. Fél évszázad alatt huszonhét ilyen veszteség gyűlt össze, ezért olyan feladatokban, ahol valódi tartamra van szükség, az atomi skálát veszik, nem ezt.
A második sajátosság egyáltalán nem a meghatározásban rejlik, hanem a tárolás módjában, és ez teszi az egyetlen olyan határrá a katalógusunkban, amelyet nem a természet és nem megegyezés szabott meg, hanem egy gépi szó szélessége. A julián dátum sohasem ér véget, mert szám; a Unix-idő 2038. január 19-én ér véget, mert négybájtos mező. Egy mennyiség és ábrázolása közötti különbség a mérésügy embereit rendszerint kevéssé foglalkoztatja, itt pedig éppen az dönt el mindent.
Katalógus · mértékegységek
Minden mennyiségnek egy adatlap
Hét SI-alapegység, huszonkét saját nevű származtatott és a rendszeren kívüli mennyiségek, amelyek nélkül sem a technika, sem a naptár nem működne.