Unixový čas a zápis ISO 8601
Jednotka mimo SI · veličina: okamžik jako celý počet sekund od roku 1970
Devatenáctého ledna 2038 ve tři hodiny čtrnáct minut a sedm sekund světového času dojde třicetidvoubitový čítač sekund k hodnotě 2 147 483 647 — největšímu číslu, jaké dokáže pojmout. Další takt zdvihne nejvyšší bit a totéž binární slovo se napříště přečte jako záporné: hodiny, které vedou čas právě tímto počítáním, se neocitnou v roce 2038, nýbrž v prosinci 1901. Kuriozitou vzdálené budoucnosti to není — průmyslový regulátor či vodoměr slouží déle než těch dvanáct let, jež zbývají.
Počítání je vystavěno nanejvýš prostě: sekundy běží za sebou od půlnoci prvního ledna 1970 a den v něm obsahuje vždy přesně 86 400 sekund. Právě prostota je zdrojem obou jeho zvláštností. Na jedné straně z čísla okamžitě plyne kalendářní datum a naopak, takže každý záznam událostí, každá databáze a každý souborový systém vede čas právě jím. Na druhé straně přestupnou sekundu v takovém počítání nelze vyjádřit vůbec, což znamená, že navzdory jménu nečísluje sekundy, nýbrž dny se zlomky, a je ve skutečnosti lineární funkcí zápisu UTC, nikoli čítačem uplynulého času.
01 · Definice
Unixový čas je počet sekund, jež uplynuly od půlnoci prvního ledna 1970 světového koordinovaného času, za předpokladu, že každý den drží přesně 86 400 sekund. Zápis ISO 8601 zadává totéž jinak: kalendářním datem, denní dobou a údajem o posunu od nultého poledníku, přičemž pole běží přísně od hrubého k jemnému.
Výhrada o 86 400 sekundách není maličkost, nýbrž to nejpodstatnější v definici. Přestupnou sekundu, kterou vyhlašuje služba rotace Země, počítání pojmout nedokáže, a proto systém v okamžiku vložení buď opakuje jednu a touž hodnotu dvakrát, nebo posune hodiny zpět. Z toho plyne důležité: rozdíl dvou unixových čísel není počtem sekund, jež mezi dvěma událostmi skutečně uplynuly, pokud mezi ně padla přestupná sekunda — odchylka od atomové stupnice narostla už na dvacet sedm sekund.
Mez naproti tomu nezávisí na definici, nýbrž na šířce uložení. Třicet dva bitů se znaménkem dává největší hodnotu 2 147 483 647, jež připadá na devatenáctého ledna 2038; další přírůstek převede nejvyšší bit na jedničku a učiní číslo záporným, čímž hodiny odhodí ke třináctému prosinci 1901. Šedesát čtyři bitů odsouvá hranici o dvě stě devadesát dva miliard let vpřed, avšak celé nanosekundy v týchž šedesáti čtyřech bitech dojdou už roku 2262.
Zápis podle normy řeší jinou úlohu — výměnu, nikoli uložení — a proto v něm váží věci, jež číslo vůbec nemá: hodinový posun, oddělovač mezi datem a časem a pravidlo, že při stejné délce řetězce se lexikografické pořadí shoduje s časovým. Právě tato poslední vlastnost učinila z formátu základ třídění v názvech souborů a v záznamech.
Veďte čas jezdcem a sledujte, jak se registr plní: bity se rozsvěcují zprava doleva, a dokud nejvyšší, znaménkový, zůstává tmavý, je číslo kladné a datum roste. Jakmile čítač překročí 2 147 483 647, nejvyšší bit vzplane rudě, celé číslo se stane záporným a hodiny skočí do roku 1901.
Zelená přímka je atomová stupnice, kde každá sekunda je opravdu sekundou. Červená schodovitá je unixový čas, který při každém vložení vydá jednu a touž značku dvakrát, pročež čára ustrne na místě. Odchylka činí už dvacet sedm sekund a roste, a proto se počítání hodí ke kalendářnímu datu, nikoli však k měření trvání ve fyzice.
02 · Převod
Zadejte časovou značku nebo datum
Mezi všemi násobky počítání — sekundami, milisekundami, mikro- a nanosekundami — jsou převody přesné, neboť se liší pouze činitelem. Přibližný je jediný řádek: převod na atomovou stupnici vyžaduje vědět, kolik přestupných sekund se k danému okamžiku nashromáždilo.
Rozbor řetězce podle normy provádí list v rozšířeném zápisu s písmenem Z; základní tvar bez oddělovačů je vynesen do jemných nastavení.
Problém roku 2038 neleží v normě, nýbrž v technice a ve starém kódu: třicetidvoubitové značky sedí ve firmwaru měřidel, v průmyslových regulátorech, ve formátech souborových systémů a v databázích, kde je pole už vyhlášeno čtyřmi bajty. Změnit typ ve zdrojích je dost snadné; projít miliony instalovaných zařízení ve zbývajících dvanácti letech je úloha téhož druhu jako ta, jež stála před rokem 2000.
| Hodnota | Poznámka | ||
|---|---|---|---|
| {u} | {name} | {value} | {note} |
03 · Řády veličin
logaritmická stupnice: od sekundy k mezi šedesáti čtyř bitů04 · Měřicí přístroje
Čím se událost opatřuje značkou
Zvláštní čip s baterií, který vede počítání, dokud je zařízení vypnuto. Uchovává obvykle nikoli unixovou značku, nýbrž kalendářní pole zvlášť, a šířka jeho pole roku je vlastní, takže u starých desek začíná řeč o roce 2038 otázkou, do kterého roku počítá sám čip.
Protokol NTP přivádí hodiny stroje ke společnému času s přesností na jednotky milisekund a týž protokol varuje před vložením zvláštním příznakem den předem. Vlastní mez má rovněž, a nastává dříve: počítá se od roku 1900 v bezznaménkových třiceti dvou bitech a přeteče v únoru 2036.
Do záznamu se značka píše buď číslem, nebo řetězcem podle normy, a druhé je vhodnější přesně z jednoho důvodu: u řetězců stejné délky se abecední pořadí shoduje s časovým, takže se položky třídí bez rozboru data. Právě proto se formát rozšířil daleko za hranice výpočetní techniky.
Připravenost přístroje na rok 2038 lze ověřit jediným způsobem — posunout na něm hodiny za osudnou hranici a podívat se, co se stane se záznamy, s certifikáty a s počítáním intervalů. Takto se už našla selhání v účtování, v systémech řízení přístupu a v dobách platnosti klíčů, kde datum v budoucnosti vzniká sčítáním a přetéká dlouho před samotnou hranicí.
05 · Pravidla zápisu
Od hrubého k jemnému, a vždy s posunem
Norma žádá sestupné pořadí polí, čtyři číslice roku, spojovník jako oddělovač data a písmeno T před časem; hodinový posun se uvádí buď písmenem Z pro nultý poledník, nebo jako plus-minus hodiny a minuty. Unixová značka se píše celým číslem bez oddělování řádů a násobek je nutno vždy upřesnit, neboť tisícina odlišuje sekundy od milisekund a podle velikosti čísla je lze snadno zaměnit.
První zápis se v různých zemích čte různě a je proto ve výměně dat nepřípustný. Druhý vypouští jak oddělovač, tak posun, takže okamžik zůstává neurčen o den na obě strany. Třetí ztrácí úvodní nuly, pročež se řetězce přestávají třídit abecedně — a právě pro tuto vlastnost se formát cení. Čtvrtý klade rovnítko mezi unixové počítání a atomovou stupnici, ačkoli mezi nimi leží dvacet sedm sekund nashromážděných vložení.
06 · Sousední jednotky
Vedle stojí všechna počítání vystavěná podle téhož principu, avšak od jiného počátku: čas NTP od roku 1900, juliánské datum od poledne roku 4713 před naším letopočtem, stupnice družicového systému od ledna 1980. Liší se pouze epochou a jednotkou, a proto se převádějí odečtením konstanty.
sekundy se znaménkem
jeho mez padá už na rok 2036
přestupné sekundy počítány poctivě
Z listů Simetria vedle stojí juliánské datum, odkud je převodní konstanta vzata, stupnice UTC, TAI a UT1, které vysvětlují chybějící přestupné sekundy, sekunda jako jednotka počítání, a bit, jehož šířka mez určuje.
07 · Historický oddíl
Epocha zvolená z nedostatku bitů
V první příručce k Unixu se čas počítal v šedesátinách sekundy od počátku roku 1971 a ve třiceti dvou bitech pojalo takové počítání pouhé dobré dva roky. Docházely tak rychle, že by se epocha musela posouvat při každém vydání systému, a od zlomků sekundy se upustilo ve prospěch celých.
Přechodem k celým sekundám získali vývojáři zásobu sto třiceti šesti let a mohli zvolit počátek podle pohodlí, nikoli z nouze. Vzali první leden 1970 — nejbližší kulaté datum v minulosti, k němuž strojové záznamy stejně nesahaly — a od té doby jej ani jednou nezměnili, ačkoli byl systém nejednou přepsán od základů.
Mezinárodní organizace pro normalizaci svedla rozbíhající se národní formáty v jeden a položila mu za základ prosté pravidlo: pole běží od hrubého k jemnému, všechna s úvodními nulami. Vedlejší následek se ukázal důležitější než záměr — takové řetězce se třídí jako čísla a formát se rozšířil do názvů souborů, záznamů a výměnných protokolů.
Stolní a serverové systémy přešly na šedesát čtyři bitů dávno a tam je hranice odsunuta za každý rozumný obzor. Nebezpečí zůstalo jinde: ve firmwaru přístrojů s dvacetiletou životností, ve formátech souborů, kde je pole vyhlášeno čtyřmi bajty, a ve výpočtech budoucích lhůt, jež přetékají už dnes, jakmile se k dnešnímu datu přičte patnáct let.
Počítání, které navzdory jménu sekundy nepočítá
Definice unixového času zní jako počítání sekund, avšak požadavek rovných 86 400 sekund za den z ní činí něco jiného: lineární funkci zápisu UTC, nikoli míru uplynulého času. Pokaždé, když služba rotace Země vyhlásí vložení, musí počítání zopakovat jednu a touž hodnotu dvakrát nebo skočit zpět, a rozdílu dvou značek se právě ta sekunda ztrácí. Za půl století se takových ztrát nashromáždilo dvacet sedm, a proto se v úlohách, kde je třeba skutečné trvání, bere atomová stupnice, nikoli tato.
Druhá zvláštnost neleží vůbec v definici, nýbrž ve způsobu uložení, a to z ní činí jedinou mez v našem katalogu, kterou nestanovila příroda ani dohoda, nýbrž šířka strojového slova. Juliánské datum nekončí nikdy, protože je číslem; unixový čas končí devatenáctého ledna 2038, protože je polem o čtyřech bajtech. Rozdíl mezi veličinou a jejím zobrazením zaměstnává metrology obvykle málo, a zde právě on rozhoduje o všem.
Katalog · měřicí jednotky
List pro každou veličinu
Sedm základních jednotek SI, dvaadvacet odvozených s vlastními jmény a veličiny mimo soustavu, bez nichž by nefungovala ani technika, ani kalendář.