Czas Unix i zapis ISO 8601
Jednostka spoza SI · wielkość: chwila jako całkowita liczba sekund od 1970 roku
Dziewiętnastego stycznia 2038 roku o godzinie trzeciej czternaście minut i siedem sekund czasu uniwersalnego trzydziestodwubitowy licznik sekund dojdzie do 2 147 483 647 — największej liczby, jaką jest w stanie pomieścić. Następny takt podniesie najstarszy bit, a to samo słowo dwójkowe odczyta się już jako ujemne: zegary, które przechowują czas właśnie tym liczeniem, znajdą się nie w 2038 roku, lecz w grudniu 1901. Ciekawostką dalekiej przyszłości to nie jest — sterownik przemysłowy albo wodomierz służy dłużej niż te dwanaście lat, które zostały.
Liczenie jest zbudowane nadzwyczaj prosto: sekundy biegną jedna za drugą od północy pierwszego stycznia 1970 roku, a doba mieści w nim zawsze dokładnie 86 400 sekund. Właśnie ta prostota jest źródłem obu jego osobliwości. Z jednej strony z liczby wynika natychmiast data kalendarzowa i odwrotnie, tak że każdy dziennik zdarzeń, każda baza danych i każdy system plików prowadzą czas właśnie nim. Z drugiej sekundy przestępnej w takim liczeniu nie da się wyrazić w ogóle, co znaczy, że wbrew nazwie numeruje ono nie sekundy, lecz doby z ułamkami, i jest w istocie funkcją liniową zapisu UTC, a nie licznikiem czasu, który upłynął.
01 · Definicja
Czas Unix to liczba sekund, które upłynęły od północy pierwszego stycznia 1970 roku uniwersalnego czasu koordynowanego, przy założeniu, że każda doba mieści dokładnie 86 400 sekund. Zapis ISO 8601 podaje to samo inaczej: datą kalendarzową, porą dnia i wskazaniem przesunięcia względem południka zerowego, przy czym pola biegną ściśle od grubego do drobnego.
Zastrzeżenie o 86 400 sekundach nie jest drobiazgiem, lecz tym, co w definicji najistotniejsze. Sekundy przestępnej, ogłaszanej przez służbę obrotu Ziemi, liczenie pomieścić nie potrafi, i dlatego w chwili wstawienia system albo powtarza dwukrotnie jedną i tę samą wartość, albo cofa zegar. Wynika stąd rzecz ważna: różnica dwóch liczb unix nie jest liczbą sekund, które między dwoma zdarzeniami rzeczywiście upłynęły, jeśli między nie padło wstawienie — rozbieżność ze skalą atomową urosła już do dwudziestu siedmiu sekund.
Granica natomiast nie zależy od definicji, lecz od szerokości przechowywania. Trzydzieści dwa bity ze znakiem dają największą wartość 2 147 483 647, która przypada na dziewiętnastego stycznia 2038 roku; następny przyrost przestawia najstarszy bit na jeden i czyni liczbę ujemną, odrzucając zegar do trzynastego grudnia 1901 roku. Sześćdziesiąt cztery bity odsuwają granicę o dwieście dziewięćdziesiąt dwa miliardy lat naprzód, ale całe nanosekundy w tych samych sześćdziesięciu czterech bitach kończą się już w 2262 roku.
Zapis według normy rozwiązuje inne zadanie — wymianę, nie przechowywanie — i dlatego ważą w nim rzeczy, których liczba nie ma wcale: przesunięcie godzinowe, rozdzielnik między datą a godziną oraz reguła, że przy równej długości łańcucha porządek alfabetyczny zgadza się z chronologicznym. Właśnie ta ostatnia własność uczyniła z formatu podstawę sortowania w nazwach plików i w dziennikach.
Prowadź czas suwakiem i patrz, jak rejestr się wypełnia: bity zapalają się od prawej do lewej, a dopóki najstarszy, ten od znaku, pozostaje ciemny, liczba jest dodatnia, a data rośnie. Gdy tylko licznik przekroczy 2 147 483 647, najstarszy bit zapłonie czerwienią, cała liczba stanie się ujemna, a zegar skoczy w 1901 rok.
Zielona prosta to skala atomowa, gdzie każda sekunda naprawdę jest sekundą. Czerwona schodkowa to czas Unix, który przy każdym wstawieniu wydaje dwukrotnie jeden i ten sam znacznik, przez co linia staje w miejscu. Rozbieżność wynosi już dwadzieścia siedem sekund i rośnie, i dlatego liczenie nadaje się do daty kalendarzowej, ale nie do mierzenia czasów trwania w fizyce.
02 · Przeliczanie
Wpisz znacznik czasu albo datę
Między wszystkimi wielokrotnościami liczenia — sekundami, milisekundami, mikro- i nanosekundami — przeliczenia są dokładne, skoro różnią się tylko czynnikiem. Przybliżony jest jeden jedyny wiersz: przeliczenie na skalę atomową wymaga wiedzy, ile sekund przestępnych zebrało się do danej chwili.
Rozbiór łańcucha według normy karta wykonuje w zapisie rozszerzonym z literą Z; postać podstawowa bez rozdzielników została wyniesiona do ustawień szczegółowych.
Problem roku 2038 nie tkwi w normie, lecz w sprzęcie i w starym kodzie: trzydziestodwubitowe znaczniki siedzą w oprogramowaniu liczników, w sterownikach przemysłowych, w formatach systemów plików i w bazach danych, gdzie pole zadeklarowano już jako czterobajtowe. Zmienić typ w źródłach jest dość łatwo; przejść przez miliony zainstalowanych urządzeń w ciągu pozostałych dwunastu lat to zadanie tego samego rodzaju co owo sprzed roku 2000.
| Wartość | Uwaga | ||
|---|---|---|---|
| {u} | {name} | {value} | {note} |
03 · Rzędy wielkości
skala logarytmiczna: od sekundy do granicy sześćdziesięciu czterech bitów04 · Przyrządy pomiarowe
Czym znakuje się zdarzenie w czasie
Osobny układ z baterią, który prowadzi liczenie, dopóki urządzenie jest wyłączone. Przechowuje zwykle nie znacznik unix, lecz pola kalendarza osobno, a szerokość jego pola roku jest własna, tak że przy starych płytach rozmowa o 2038 zaczyna się od pytania, do którego roku liczy sam układ.
Protokół NTP sprowadza zegar maszyny do wspólnego czasu z dokładnością do kilku milisekund i on sam ostrzega o wstawieniu osobną flagą na dobę wcześniej. Własną granicę też ma, i przychodzi ona wcześniej: liczenie biegnie od 1900 roku w trzydziestu dwóch bitach bez znaku i przepełni się w lutym 2036.
W dzienniku znacznik zapisuje się albo liczbą, albo łańcuchem według normy, a to drugie jest lepsze z dokładnie jednego powodu: przy łańcuchach równej długości porządek alfabetyczny zgadza się z chronologicznym, tak że wpisy sortują się bez rozbierania daty. Właśnie dlatego format rozszedł się daleko poza technikę obliczeniową.
Gotowość urządzenia na rok 2038 można sprawdzić jednym jedynym sposobem — przestawić w nim zegar poza fatalną granicę i zobaczyć, co stanie się z dziennikami, z certyfikatami i z liczeniem przedziałów. Tak znaleziono już awarie w rozliczeniach, w systemach kontroli dostępu i w okresach ważności kluczy, gdzie datę w przyszłości tworzy się przez dodawanie i przepełnia się ona na długo przed samą granicą.
05 · Zasady zapisu
Od grubego do drobnego, i zawsze z przesunięciem
Norma wymaga malejącej kolejności pól, czterech cyfr roku, łącznika jako rozdzielnika daty i litery T przed godziną; przesunięcie godzinowe podaje się albo literą Z dla południka zerowego, albo jako plus-minus godziny i minuty. Znacznik unix zapisuje się liczbą całkowitą bez oddzielania rzędów, a wielokrotność trzeba zawsze doprecyzować, skoro czynnik tysiąca oddziela sekundy od milisekund, a po wielkości liczby łatwo je pomylić.
Pierwszy zapis czyta się w różnych krajach rozmaicie i dlatego w wymianie danych jest niedopuszczalny. Drugi opuszcza i rozdzielnik, i przesunięcie, tak że chwila zostaje nieokreślona o dobę w obie strony. Trzeci gubi zera wiodące, przez co łańcuchy przestają sortować się alfabetycznie — a właśnie za tę własność format się ceni. Czwarty stawia znak równości między liczeniem unix a skalą atomową, podczas gdy leży między nimi dwadzieścia siedem sekund zebranych wstawień.
06 · Jednostki sąsiednie
Obok stoją wszystkie liczenia zbudowane na tej samej zasadzie, ale od innego początku: czas NTP od 1900 roku, data juliańska od południa roku 4713 przed naszą erą, skala układu satelitarnego od stycznia 1980. Różnią się tylko epoką i jednostką, i dlatego przelicza się je odejmowaniem stałej.
sekundy ze znakiem
jego granica przypada już na 2036
sekundy przestępne policzone uczciwie
Spośród kart Simetrium obok stoją data juliańska, skąd wzięto stałą przeliczenia, skale UTC, TAI i UT1, które tłumaczą zaginione sekundy przestępne, sekunda jako jednostka liczenia, oraz bit, którego szerokość granicę wyznacza.
07 · Dział historyczny
Epoka wybrana z braku bitów
W pierwszym podręczniku Uniksa czas liczono w sześćdziesiątych częściach sekundy od początku 1971 roku, a w trzydziestu dwóch bitach takie liczenie mieściło ledwie dobre dwa lata. Kończyły się tak szybko, że epokę trzeba by przestawiać przy każdym wydaniu systemu, i zrezygnowano z ułamków sekundy na rzecz całych.
Przechodząc na całe sekundy, twórcy zyskali zapas stu trzydziestu sześciu lat i mogli wybrać początek dla wygody, a nie z konieczności. Wzięto pierwszy stycznia 1970 roku — najbliższą okrągłą datę w przeszłości, do której zapisy maszynowe i tak nie sięgały — i od tego czasu nie zmieniono jej ani razu, choć system nieraz przepisywano od podstaw.
Międzynarodowa Organizacja Normalizacyjna sprowadziła rozbieżne formaty narodowe do jednego i położyła u jego podstaw prostą regułę: pola biegną od grubego do drobnego, wszystkie z zerami wiodącymi. Skutek uboczny okazał się ważniejszy od zamysłu — takie łańcuchy sortują się jak liczby, a format rozszedł się w nazwy plików, dzienniki i protokoły wymiany.
Systemy biurkowe i serwerowe przeszły na sześćdziesiąt cztery bity dawno i tam granicę odsunięto poza wszelki rozsądny widnokrąg. Niebezpieczeństwo zostało gdzie indziej: w oprogramowaniu przyrządów o dwudziestoletniej żywotności, w formatach plików, gdzie pole zadeklarowano jako czterobajtowe, oraz w obliczeniach przyszłych terminów, które przepełniają się już dziś, gdy tylko do dzisiejszej daty doda się piętnaście lat.
Liczenie, które wbrew nazwie sekund nie liczy
Definicja czasu Unix brzmi jak liczenie sekund, ale wymóg równych 86 400 sekund na dobę czyni z niej coś innego: funkcję liniową zapisu UTC, a nie miarę czasu, który upłynął. Za każdym razem, gdy służba obrotu Ziemi ogłasza wstawienie, liczenie musi powtórzyć dwukrotnie jedną i tę samą wartość albo skoczyć wstecz, a różnicy dwóch znaczników ubywa właśnie ta sekunda. Przez pół wieku takich ubytków zebrało się dwadzieścia siedem, i dlatego w zadaniach, gdzie potrzebny jest prawdziwy czas trwania, bierze się skalę atomową, a nie tę.
Druga osobliwość nie tkwi wcale w definicji, lecz w sposobie przechowywania, i to czyni ją jedyną granicą w naszym katalogu, której nie wyznaczyła ani przyroda, ani umowa, lecz szerokość słowa maszynowego. Data juliańska nie kończy się nigdy, bo jest liczbą; czas Unix kończy się dziewiętnastego stycznia 2038 roku, bo jest polem czterobajtowym. Różnica między wielkością a jej przedstawieniem zajmuje metrologów zwykle mało, a tutaj to właśnie ona rozstrzyga o wszystkim.
Katalog · jednostki miary
Karta dla każdej wielkości
Siedem jednostek podstawowych SI, dwadzieścia dwie pochodne z własnymi nazwami i wielkości spoza układu, bez których nie działałaby ani technika, ani kalendarz.