Timestamp na datę
Konwertuj znacznik czasu na czytelną datę. Obsługuje sekundy, milisekundy i nanosekundy.
W 2038 roku 32-bitowy zegar nie zeruje się do 1970 — ląduje w 1901
Znakowany 32-bitowy znacznik czasu kończy się na 2 147 483 647 sekundach, czyli o 03:14:07 UTC 19 stycznia 2038 roku. Kolejna sekunda nie zawija się do zera. Zawija się do najbardziej ujemnej wartości, jaką typ potrafi pomieścić, ustawiając zegar na 13 grudnia 1901 — system psujący się w ten sposób skacze wstecz o 137 lat.
Jak to działa
- Przelicza znacznik czasu uniksowego na czytelną datę i z powrotem, w UTC i czasie lokalnym.
- Wykrywa, czy wejście jest w sekundach, czy w milisekundach, bo to najczęstsza pomyłka.
- Obsługuje ujemne znaczniki czasu, które są poprawne i reprezentują daty sprzed 1970 roku.
znacznik czasu = sekundy od 1970-01-01 00:00:00 UTC maksimum 32-bitowe ze znakiem = 2 147 483 647 → 2038-01-19 03:14:07 UTC kolejna sekunda zawija się do −2 147 483 648 → 1901-12-13 20:45:52 UTC maksimum 64-bitowe ze znakiem ≈ 9,223 × 10¹⁸ sekund — mniej więcej 292 miliardy lat
Przykład z liczbami
Ta sama dziesięciocyfrowa wartość odczytana dwojako oraz granica kończąca czas 32-bitowy.
- 1770000000 odczytane jako sekundy → 2026-02-02
- 1770000000 odczytane jako milisekundy → 1970-01-21
- 10 cyfr oznacza sekundy; 13 cyfr oznacza milisekundy
- 2147483647 → 2038-01-19 03:14:07 UTC
- sekundę później → 1901-12-13 20:45:52 UTC
Groźny jest błąd jednostki, bo psuje się po cichu. Odczytanie milisekund jako sekund wyrzuca cię w rok 58 000 i widać to na pierwszy rzut oka; odczytanie sekund jako milisekund ląduje w styczniu 1970, co wygląda na wiarygodną datę i przechodzi przegląd.
Jak czytać wynik
- Data 1 stycznia 1970 na produkcji niemal zawsze oznacza, że do formatera trafiło null albo zero, a nie prawdziwy znacznik czasu. Epoka jest domyślną wartością niezainicjowanej liczby całkowitej i dlatego ta data pojawia się w zgłoszeniach błędów tak często.
- Ujemne znaczniki czasu są całkowicie poprawne i reprezentują daty sprzed 1970 roku — −86 400 to 31 grudnia 1969. Systemy, które je odrzucają, nie potrafią przechowywać dat historycznych, a to realne ograniczenie, a nie zabezpieczenie.
- Sam znacznik czasu nie niesie strefy czasowej; to bezwzględna liczba sekund. Strefa wchodzi dopiero przy formatowaniu i dlatego ta sama wartość renderuje się jako dwie różne daty kalendarzowe u dwóch użytkowników, a przechowywanie czasu lokalnego zamiast znacznika przysparza tylu kłopotów.
- Czas uniksowy z definicji ignoruje sekundy przestępne, powtarzając albo rozciągając sekundę zamiast ją liczyć. Nie jest więc prawdziwą liczbą upłyniętych sekund SI, co ma znaczenie przy precyzyjnym pomiarze odstępów i prawie nigdy przy czymkolwiek innym.
Częste pytania
- Dlaczego moja data pokazuje się jako 1970?
- Bo do formatera trafiło zero albo null, a zero to epoka. Rzadko jest to błąd formatowania — znacznik czasu nigdy nie został ustawiony albo zaginął gdzieś wcześniej, a 1 stycznia 1970 to właśnie tak wygląda nieustawiona liczba całkowita po wyrenderowaniu.
- Jak odróżnić sekundy od milisekund?
- Policz cyfry. Współczesne znaczniki czasu mają 10 cyfr w sekundach i 13 w milisekundach. Warto strzec się przed traktowaniem sekund jako milisekund, bo daje to datę z początku 1970 roku, która wygląda prawdziwie, a nie oczywiście absurdalnie.