Unixový čas a zápis ISO 8601
Jednotka mimo SI · veličina: okamih ako celý počet sekúnd od roku 1970
Devätnásteho januára 2038 o tri hodiny štrnásť minút a sedem sekúnd svetového času dôjde tridsaťdvojbitový čítač sekúnd k hodnote 2 147 483 647 — najväčšiemu číslu, aké dokáže pojať. Ďalší takt zdvihne najvyšší bit a to isté binárne slovo sa odteraz prečíta ako záporné: hodiny, ktoré vedú čas práve týmto počítaním, sa neocitnú v roku 2038, ale v decembri 1901. Kuriozitou vzdialenej budúcnosti to nie je — priemyselný regulátor či vodomer slúži dlhšie než tých dvanásť rokov, ktoré zostávajú.
Počítanie je vystavané nanajvýš prosto: sekundy bežia za sebou od polnoci prvého januára 1970 a deň v ňom obsahuje vždy presne 86 400 sekúnd. Práve prostota je zdrojom oboch jeho zvláštností. Na jednej strane z čísla okamžite plynie kalendárny dátum a naopak, takže každý záznam udalostí, každá databáza a každý súborový systém vedie čas práve ním. Na druhej strane priestupnú sekundu v takom počítaní nemožno vyjadriť vôbec, čo znamená, že napriek menu nečísluje sekundy, ale dni so zlomkami, a je v skutočnosti lineárnou funkciou zápisu UTC, nie čítačom uplynulého času.
01 · Definícia
Unixový čas je počet sekúnd, ktoré uplynuli od polnoci prvého januára 1970 svetového koordinovaného času, za predpokladu, že každý deň drží presne 86 400 sekúnd. Zápis ISO 8601 zadáva to isté inak: kalendárnym dátumom, dennou dobou a údajom o posune od nultého poludníka, pričom polia bežia prísne od hrubého k jemnému.
Výhrada o 86 400 sekundách nie je maličkosť, ale to najpodstatnejšie v definícii. Priestupnú sekundu, ktorú vyhlasuje služba rotácie Zeme, počítanie pojať nedokáže, a preto systém v okamihu vloženia buď opakuje jednu a tú istú hodnotu dvakrát, alebo posunie hodiny späť. Z toho plynie dôležité: rozdiel dvoch unixových čísel nie je počtom sekúnd, ktoré medzi dvoma udalosťami skutočne uplynuli, ak medzi ne padla priestupná sekunda — odchýlka od atómovej stupnice narástla už na dvadsaťsedem sekúnd.
Medza naproti tomu nezávisí od definície, ale od šírky uloženia. Tridsaťdva bitov so znamienkom dáva najväčšiu hodnotu 2 147 483 647, ktorá pripadá na devätnásteho januára 2038; ďalší prírastok prevedie najvyšší bit na jednotku a urobí číslo záporným, čím hodiny odhodí k trinástemu decembru 1901. Šesťdesiatštyri bitov odsúva hranicu o dvesto deväťdesiatdva miliárd rokov vpred, no celé nanosekundy v tých istých šesťdesiatich štyroch bitoch sa minú už roku 2262.
Zápis podľa normy rieši inú úlohu — výmenu, nie uloženie — a preto v ňom vážia veci, ktoré číslo vôbec nemá: hodinový posun, oddeľovač medzi dátumom a časom a pravidlo, že pri rovnakej dĺžke reťazca sa lexikografické poradie zhoduje s časovým. Práve táto posledná vlastnosť urobila z formátu základ triedenia v názvoch súborov a v záznamoch.
Veďte čas jazdcom a sledujte, ako sa register plní: bity sa rozsvecujú sprava doľava, a kým najvyšší, znamienkový, zostáva tmavý, je číslo kladné a dátum rastie. Len čo čítač prekročí 2 147 483 647, najvyšší bit vzplanie červeno, celé číslo sa stane záporným a hodiny skočia do roku 1901.
Zelená priamka je atómová stupnica, kde každá sekunda je naozaj sekundou. Červená schodovitá je unixový čas, ktorý pri každom vložení vydá jednu a tú istú značku dvakrát, pre čo čiara zastane na mieste. Odchýlka činí už dvadsaťsedem sekúnd a rastie, a preto sa počítanie hodí ku kalendárnemu dátumu, nie však na meranie trvaní vo fyzike.
02 · Prevod
Zadajte časovú značku alebo dátum
Medzi všetkými násobkami počítania — sekundami, milisekundami, mikro- a nanosekundami — sú prevody presné, lebo sa líšia iba činiteľom. Približný je jediný riadok: prevod na atómovú stupnicu vyžaduje vedieť, koľko priestupných sekúnd sa k danému okamihu nazbieralo.
Rozbor reťazca podľa normy robí list v rozšírenom zápise s písmenom Z; základný tvar bez oddeľovačov je vynesený do jemných nastavení.
Problém roku 2038 neleží v norme, ale v technike a v starom kóde: tridsaťdvojbitové značky sedia vo firmvéri meradiel, v priemyselných regulátoroch, vo formátoch súborových systémov a v databázach, kde je pole už vyhlásené štyrmi bajtmi. Zmeniť typ v zdrojoch je dosť ľahké; prejsť milióny nainštalovaných zariadení vo zvyšných dvanástich rokoch je úloha toho istého druhu ako tá, ktorá stála pred rokom 2000.
| Hodnota | Poznámka | ||
|---|---|---|---|
| {u} | {name} | {value} | {note} |
03 · Rády veličín
logaritmická stupnica: od sekundy po medzu šesťdesiatich štyroch bitov04 · Meracie prístroje
Čím sa udalosť opatruje značkou
Osobitný čip s batériou, ktorý vedie počítanie, kým je zariadenie vypnuté. Uchováva zvyčajne nie unixovú značku, ale kalendárne polia zvlášť, a šírka jeho poľa roku je vlastná, takže pri starých doskách sa reč o roku 2038 začína otázkou, do ktorého roku počíta sám čip.
Protokol NTP privádza hodiny stroja k spoločnému času s presnosťou na jednotky milisekúnd a ten istý protokol varuje pred vložením osobitným príznakom deň vopred. Vlastnú medzu má takisto, a nastáva skôr: počíta sa od roku 1900 v bezznamienkových tridsiatich dvoch bitoch a pretečie vo februári 2036.
Do záznamu sa značka píše buď číslom, alebo reťazcom podľa normy, a druhé je vhodnejšie presne z jedného dôvodu: pri reťazcoch rovnakej dĺžky sa abecedné poradie zhoduje s časovým, takže sa položky triedia bez rozboru dátumu. Práve preto sa formát rozšíril ďaleko za hranice výpočtovej techniky.
Pripravenosť prístroja na rok 2038 možno overiť jediným spôsobom — posunúť na ňom hodiny za osudnú hranicu a pozrieť sa, čo sa stane so záznamami, s certifikátmi a s počítaním intervalov. Takto sa už našli zlyhania v účtovaní, v systémoch riadenia prístupu a v dobách platnosti kľúčov, kde dátum v budúcnosti vzniká sčítaním a pretečie dávno pred samotnou hranicou.
05 · Pravidlá zápisu
Od hrubého k jemnému, a vždy s posunom
Norma žiada zostupné poradie polí, štyri číslice roku, spojovník ako oddeľovač dátumu a písmeno T pred časom; hodinový posun sa uvádza buď písmenom Z pre nultý poludník, alebo ako plus-mínus hodiny a minúty. Unixová značka sa píše celým číslom bez oddeľovania rádov a násobok treba vždy spresniť, lebo tisícina odlišuje sekundy od milisekúnd a podľa veľkosti čísla ich možno ľahko zameniť.
Prvý zápis sa v rôznych krajinách číta rôzne a je preto vo výmene dát neprípustný. Druhý vypúšťa aj oddeľovač, aj posun, takže okamih zostáva neurčený o deň na obe strany. Tretí stráca úvodné nuly, pre čo sa reťazce prestávajú triediť abecedne — a práve pre túto vlastnosť sa formát cení. Štvrtý kladie rovnítko medzi unixové počítanie a atómovú stupnicu, hoci medzi nimi leží dvadsaťsedem sekúnd nazbieraných vložení.
06 · Susedné jednotky
Vedľa stoja všetky počítania vystavané podľa toho istého princípu, ale od iného počiatku: čas NTP od roku 1900, juliánsky dátum od poludnia roku 4713 pred naším letopočtom, stupnica družicového systému od januára 1980. Líšia sa iba epochou a jednotkou, a preto sa prevádzajú odčítaním konštanty.
sekundy so znamienkom
jeho medza pripadá už na rok 2036
priestupné sekundy počítané poctivo
Z listov Simetria vedľa stoja juliánsky dátum, odkiaľ je prevodná konštanta vzatá, stupnice UTC, TAI a UT1, ktoré vysvetľujú chýbajúce priestupné sekundy, sekunda ako jednotka počítania, a bit, ktorého šírka medzu určuje.
07 · Historický oddiel
Epocha zvolená z nedostatku bitov
V prvej príručke k Unixu sa čas počítal v šesťdesiatinách sekundy od počiatku roku 1971 a v tridsiatich dvoch bitoch pojalo také počítanie iba dobré dva roky. Míňali sa tak rýchlo, že by sa epocha musela posúvať pri každom vydaní systému, a od zlomkov sekundy sa upustilo v prospech celých.
Prechodom na celé sekundy získali vývojári zásobu stotridsaťšesť rokov a mohli zvoliť počiatok podľa pohodlia, nie z núdze. Vzali prvý január 1970 — najbližší okrúhly dátum v minulosti, ku ktorému strojové záznamy aj tak nesiahali — a odvtedy ho ani raz nezmenili, hoci bol systém neraz prepísaný od základov.
Medzinárodná organizácia pre normalizáciu zviedla rozbiehajúce sa národné formáty do jedného a položila mu za základ prosté pravidlo: polia bežia od hrubého k jemnému, všetky s úvodnými nulami. Vedľajší následok sa ukázal dôležitejším než zámer — také reťazce sa triedia ako čísla a formát sa rozšíril do názvov súborov, záznamov a výmenných protokolov.
Stolové a serverové systémy prešli na šesťdesiatštyri bitov dávno a tam je hranica odsunutá za každý rozumný obzor. Nebezpečenstvo zostalo inde: vo firmvéri prístrojov s dvadsaťročnou životnosťou, vo formátoch súborov, kde je pole vyhlásené štyrmi bajtmi, a vo výpočtoch budúcich lehôt, ktoré pretekajú už dnes, len čo sa k dnešnému dátumu priráta pätnásť rokov.
Počítanie, ktoré napriek menu sekundy nepočíta
Definícia unixového času znie ako počítanie sekúnd, no požiadavka rovných 86 400 sekúnd za deň z nej robí niečo iné: lineárnu funkciu zápisu UTC, nie mieru uplynulého času. Zakaždým, keď služba rotácie Zeme vyhlási vloženie, musí počítanie zopakovať jednu a tú istú hodnotu dvakrát alebo skočiť späť, a rozdielu dvoch značiek sa práve tá sekunda stráca. Za polstoročie sa takých strát nazbieralo dvadsaťsedem, a preto sa v úlohách, kde treba skutočné trvanie, berie atómová stupnica, nie táto.
Druhá zvláštnosť neleží vôbec v definícii, ale v spôsobe uloženia, a to z nej robí jedinú medzu v našom katalógu, ktorú nestanovila príroda ani dohoda, ale šírka strojového slova. Juliánsky dátum sa nekončí nikdy, pretože je číslom; unixový čas sa končí devätnásteho januára 2038, pretože je poľom o štyroch bajtoch. Rozdiel medzi veličinou a jej zobrazením zamestnáva metrológov zvyčajne málo, a tu práve on rozhoduje o všetkom.
Katalóg · meracie jednotky
List pre každú veličinu
Sedem základných jednotiek SI, dvadsaťdva odvodených s vlastnými menami a veličiny mimo sústavy, bez ktorých by nefungovala ani technika, ani kalendár.