Wczoraj Danny Zapytałem o kilka ciekawostek na temat czasu uniksowego i przypomniałem sobie, że czasami działa to zupełnie nieintuicyjnie.
Te trzy fakty wydają się niezwykle rozsądne i logiczne, prawda?
Czas uniksowy to liczba sekund od 1 stycznia 1970 r. o godzinie 00:00:00 UTC.
Jeśli poczekasz dokładnie jedną sekundę, czas uniksowy zmieni się dokładnie o jedną sekundę.
Czas uniksowy nigdy nie cofa się.
Nic z tego nie jest prawdą.
Ale nie wystarczy po prostu powiedzieć: „Nic z tego nie jest prawdą” bez wyjaśniania. dlaczego. Poniżej znajdziesz wyjaśnienia. Ale jeśli chcesz pomyśleć samodzielnie, nie przewijaj obok zdjęcia zegara!
Zegar stołowy z lat 1770. XVIII w. Opracowane przez Johna Leroux. Z Mile widziane kolekcje. Opublikowano na licencji CC BY
Wszystkie trzy błędne przekonania mają jeden powód: sekundy przestępne. Jeśli nie znasz sekund przestępnych, oto krótka instrukcja:
Czas UTC zależy od dwóch czynników:
Międzynarodowy czas atomowy: Średnie odczyty z setek zegarów atomowych na całym świecie. Możemy zmierzyć sekundę na podstawie właściwości elektromagnetycznych atomu i jest to najdokładniejszy pomiar czasu znany nauce.
Czas na świecie, oparty na obrocie Ziemi wokół własnej osi. Jedna pełna rewolucja to jeden dzień.
Problem w tym, że te dwie liczby nie zawsze są zgodne. Obrót Ziemi nie jest stały - stopniowo zwalnia, przez co dni w czasie uniwersalnym stają się dłuższe. Z drugiej strony zegary atomowe są diabelnie dokładne i niezmienne przez miliony lat.
Kiedy dwa czasy nie są zsynchronizowane, sekunda jest dodawana lub usuwana z czasu UTC, aby przywrócić ich synchronizację. Od 1972 roku służba IERS (który prowadzi tę sprawę) dodał 27 dodatkowych sekund. Rezultatem było 27 dni UTC o czasie trwania 86 401 sekund. Teoretycznie możliwy jest dzień trwający 86 399 sekund (minus jedna). Obie opcje zaprzeczają podstawowemu założeniu czasu uniksowego.
Czas uniksowy zakłada, że każdy dzień trwa dokładnie 86 400 sekund (60 × 60 × 24 = 86 400), bez żadnych dodatkowych sekund. Jeśli taki skok nastąpi, czas uniksowy albo przeskakuje o jedną sekundę, albo liczy dwie sekundy w jednej. Od 2019 roku brakuje 27 sekund przestępnych.
Zatem nasze błędne przekonania należy uzupełnić w następujący sposób:
Czas uniksowy to liczba sekund od 1 stycznia 1970 r. 00:00:00 UTC minus sekundy przestępne.
Jeśli poczekasz dokładnie jedną sekundę, czas uniksowy zmieni się dokładnie o jedną sekundę, chyba że usunięto sekundę przestępną.
Do tej pory w praktyce nigdy nie usuwano sekund (a spowolnienie obrotu Ziemi oznacza, że jest to mało prawdopodobne), ale gdyby tak się kiedykolwiek stało, oznaczałoby to, że dzień UTC skróciłby się o jedną sekundę. W tym przypadku ostatnia sekunda czasu UTC (23:59:59) jest odrzucana.
Każdy dzień uniksowy ma tę samą liczbę sekund, więc ostatnia uniksowa sekunda skróconego dnia nie będzie odpowiadać żadnemu czasowi UTC. Oto jak to wygląda w odstępach ćwierćsekundowych:
Jeśli zaczniesz o 23:59:58:00 UTC i odczekasz jedną sekundę, czas Unixowy przesunie się o dwie sekundy UTC, a znacznik czasu Unix 101 nie zostanie nikomu przypisany.
Czas uniksowy nigdy nie może się cofnąć, aż do dodania sekundy przestępnej.
W praktyce zdarzyło się to już 27 razy. Na koniec dnia UTC dodawana jest dodatkowa sekunda o godzinie 23:59:60. Unix ma tę samą liczbę sekund w ciągu dnia, więc nie może dodać dodatkowej sekundy - zamiast tego musi powtórzyć uniksowe znaczniki czasu dla ostatniej sekundy. Oto jak to wygląda w odstępach ćwierćsekundowych:
Jeśli zaczniesz o 23:59:60.50 i poczekasz pół sekundy, czas uniksowy wraca o pół sekundy, a znacznik czasu Uniksa 101 odpowiada dwóm sekundom czasu UTC.
To chyba nie jedyne dziwactwa czasów uniksowych - tylko to co wczoraj przypomniałem.