Skip to main content

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.

  1. 1770000000 odczytane jako sekundy → 2026-02-02
  2. 1770000000 odczytane jako milisekundy → 1970-01-21
  3. 10 cyfr oznacza sekundy; 13 cyfr oznacza milisekundy
  4. 2147483647 → 2038-01-19 03:14:07 UTC
  5. 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.

Przewodnik po czasie uniksowym

Czas uniksowy (epoch time) to system przechowywania dat i czasu w postaci liczby sekund lub milisekund, które upłynęły od północy 1 stycznia 1970 roku (UTC). Ten standard jest powszechnie używany w programowaniu, bazach danych i protokołach sieciowych dzięki swojej prostocie i łatwości porównywania dat. Wartość 0 oznacza dokładnie te date, każda następna sekunda dodaje 1 do licznika.

Różne formaty timestamp

Najczęstszym formatem jest Unix w sekundach (np. 1704067200), używany w systemach Linux i PHP. Drugim popularnym formatem jest Unix w milisekundach (np. 1704067200000), używany w JavaScript i JVM. Trzecim jest format w nanosekundach (np. 1704067200000000000), używany w systemach wymagających ekstremalnej precyzji, takich jak bazy danych czy systemy finansowe.

Problem roku 2038

Tradycyjny Unix w 32-bitowych systemach ma limit maksymalny 2147483647 sekund, co odpowiada 19 stycznia 2038 roku. Po tej dacie wartość przekręcić się na ujemna. Współczesne systemy rozwiązują to używając 64-bitowych liczb, które wystarcza na wieki. Nowe aplikacje powinny używać milisekund lub nanosekund dla uniknięcia problemów z kompatybilnością.

Strefy czasowe

Timestamp uniksowy jest zawsze w UTC, co oznacza ze nie zawiera informacji o strefie czasowej. Aby wyświetlić date lokalnie, system dodaje przesunięcie strefy czasowej. Na przykład ta sama wartość timestamp w Polsce będzie wyświetlana o 1 lub 2 godziny wcześniej niż w USA (zależnie od czasu letniego). To sprawia ze timestamp jest idealny do przechowywania i przesyłania dat pomiędzy strefami czasowymi.