Czas Unix w jednym akapicie
Czas Unix liczy sekundy, które upłynęły od 00:00:00 UTC 1 stycznia 1970 roku — momentu nazywanego epoką. Całkowicie ignoruje strefy czasowe i czas letni: w danej chwili czas Unix jest tą samą liczbą w każdym miejscu na Ziemi. Dlatego jest naturalnym formatem do przechowywania i porównywania momentów w bazach danych, plikach logów, polach exp i iat tokenów JWT, czasach modyfikacji plików, odpowiedziach API i harmonogramach w stylu crona. Haczyk w tym, że 1700000000 nic człowiekowi nie mówi — i do tego służy ten konwerter. Dla porządku: to 14 listopada 2023, 22:13:20 UTC.
Sekundy, milisekundy i dłuższe liczby
Różne systemy liczą w różnych jednostkach:
- Sekundy, 10 cyfr dla bieżących dat: narzędzia Unix i Linux, PHP
time(), Pythontime.time()(z częścią ułamkową), większość baz SQL, tokeny JWT. - Milisekundy, 13 cyfr: JavaScript
Date.now(), JavaSystem.currentTimeMillis(), wiele API w JSON i zdarzeń analitycznych. - Mikrosekundy, 16 cyfr, i nanosekundy, 19 cyfr: niektóre bazy danych, Go, narzędzia do śledzenia o wysokiej rozdzielczości.
Narzędzie ustala jednostkę na podstawie wielkości. Każda liczba całkowita o wartości bezwzględnej poniżej 100 000 000 000 jest odczytywana jako sekundy, do 100 000 000 000 000 (14 cyfr) jako milisekundy, poniżej 10^17 jako mikrosekundy, a wszystko większe jako nanosekundy. Te progi działają w każdym realistycznym przypadku: jako sekundy pierwszy z nich oznaczałby rok 5138, a jako milisekundy początek marca 1973.
Wartości w mikrosekundach i nanosekundach są obcinane do precyzji milisekund, bo tylko tyle pokazują wyniki. Wartości ułamkowe, takie jak 1700000000.5, nie są akceptowane, więc najpierw usuń część dziesiętną.
Liczby ujemne działają i dają daty sprzed 1970 roku: -86400 to 31 grudnia 1969.
Jak czytać sześć wyników
- Unix, sekundy i Unix, milisekundy: ten sam moment w obu jednostkach. Milisekundy są zachowywane, gdy wkleisz datę z częścią czasu typu
.250; wartość w sekundach jest zaokrąglana w dół. - ISO 8601: na przykład
2023-11-14T22:13:20.000Z. Zawsze w UTC, oznaczonym literąZ, z precyzją do milisekund. To najbezpieczniejszy format dla API i JSON, bo poprawnie sortuje się jako tekst, a każdy język programowania go parsuje. - UTC: data w stylu HTTP,
Tue, 14 Nov 2023 22:13:20 GMT, używana w nagłówkachExpires,Last-Modifiedi ciasteczkach. - Twoja strefa czasowa: dzień/miesiąc/rok z zegarem 24-godzinnym, a po nich skrót strefy czasowej (lub przesunięcie względem GMT, jeśli skrótu nie ma) i nazwa strefy zgłaszana przez przeglądarkę, np.
Europe/Berlin. Czas letni jest uwzględniany dla tej konkretnej daty, a nie według dzisiejszego przesunięcia. - Względnie: sformułowania takie jak „wczoraj”, „za 3 dni” czy „2 lata temu”. Z założenia są przybliżone: miesiąc to średnio około 30,4 dnia, a wartość aktualizuje się, dopóki strona jest otwarta.
Zamiana daty na znacznik czasu
Zamiast liczby możesz wkleić datę. Najbardziej niezawodnym wejściem są ciągi w ISO 8601, a reguły dotyczące stref czasowych warto znać, bo to one powodują większość pomyłek o kilka godzin:
2024-05-01T12:00:00Zi2024-05-01T12:00:00+02:00zawierają własne przesunięcie i są jednoznaczne.2024-05-01bez godziny jest traktowane jako północ UTC.2024-05-01T12:00i2024-05-01 12:00, czyli data z godziną, ale bez przesunięcia, są traktowane jako Twój czas lokalny.
Jeśli więc latem jesteś w Berlinie, 2024-05-01 i 2024-05-01 00:00 różnią się o dwie godziny. Przy konwersji na potrzeby serwera lub API dodaj Z albo jawne przesunięcie, aby wyeliminować zgadywanie.
Inne formaty, takie jak May 1, 2024 12:00, zależą od parsera dat w przeglądarce i mogą zachowywać się różnie w Chrome, Firefoksie i Safari. Formaty z dniem na początku, takie jak 01/05/2024, są odczytywane w amerykańskim stylu z miesiącem na początku albo odrzucane, więc ich unikaj.
Pułapki, o których warto wiedzieć
- Sekundy przestępne. Czas Unix udaje, że każda doba ma dokładnie 86 400 sekund. 27 sekund przestępnych dodanych od 1972 roku nie jest liczonych, co ma znaczenie tylko przy precyzyjnych pomiarach naukowych.
- Problem roku 2038. Systemy, które przechowują czas Unix jako 32-bitową liczbę całkowitą ze znakiem, przepełniają się przy
2147483647, czyli 19 stycznia 2038, 03:14:07 UTC. Wklej tę liczbę, aby to zobaczyć. Nowoczesne systemy 64-bitowe nie są zagrożone, ale stare urządzenia wbudowane i formaty plików mogą być. - Rozjechane zegary. Jeśli token JWT jest odrzucany jako „jeszcze nieważny” lub „wygasły”, porównaj jego
iatiexpz aktualnym Bieżącym czasem Unix na górze strony. Różnica kilku minut wskazuje raczej na źle ustawiony zegar niż na wadliwy token.
Aby odczytać pola tokenu, zdekoduj jego środkową część koderem Base64 i uporządkuj JSON w narzędziu Formatowanie i walidacja JSON. Konwersje działają w przeglądarce z użyciem jej własnego zegara i ustawień strefy czasowej.