Przejdź do treści

Czas Unix (timestamp) — co to jest i jak go przeliczyć na datę

Redakcja AMKBIT · · 2 min czytania

Liczba 1798761600 to konkretna chwila w czasie. Wyjaśniamy, jak działa znacznik czasu Unix, czym różnią się sekundy od milisekund, jak uwzględnić strefę czasową i czym jest problem roku 2038.

Znacznik czasu Unix (Unix timestamp, epoch time) to liczba sekund, które upłynęły od 1 stycznia 1970 roku, godz. 00:00:00 UTC. Ten moment nazywa się epoką Uniksa. Zapis jest prosty, niezależny od strefy czasowej i łatwy do porównywania, dlatego używają go bazy danych, systemy operacyjne, logi i API.

Przykłady

TimestampData (UTC)
01 stycznia 1970, 00:00:00
1 000 000 0009 września 2001, 01:46:40
1 798 761 6001 stycznia 2027, 00:00:00
2 147 483 64719 stycznia 2038, 03:14:07

Sekundy czy milisekundy?

Klasyczny timestamp liczy sekundy (10 cyfr dla dat współczesnych). JavaScript (Date.now()) i wiele API podaje milisekundy — 13 cyfr. Jeśli po przeliczeniu wychodzi rok 55 000 albo 1970, prawdopodobnie pomylono jednostki.

Strefy czasowe

Timestamp nie ma strefy czasowej — to ten sam moment na całym świecie. Strefa pojawia się dopiero przy zamianie na datę „do czytania”. W Polsce obowiązuje czas środkowoeuropejski: UTC+1 zimą i UTC+2 latem (czas letni od ostatniej niedzieli marca do ostatniej niedzieli października). Timestamp 1 798 761 600 to w Polsce 1 stycznia 2027 o 01:00.

Dobra praktyka: zapisuj w bazie czas w UTC (lub jako timestamp), a na lokalny czas zamieniaj dopiero przy wyświetlaniu.

Jak przeliczyć w kodzie

// JavaScript
new Date(1798761600 * 1000).toISOString()   // "2027-01-01T00:00:00.000Z"
Math.floor(Date.now() / 1000)                // aktualny timestamp w sekundach

// PHP
date('Y-m-d H:i:s', 1798761600);             // w strefie ustawionej w PHP
time();                                      // aktualny timestamp

# Python
from datetime import datetime, timezone
datetime.fromtimestamp(1798761600, tz=timezone.utc)

Sekundy przestępne

Czas Unix pomija sekundy przestępne — każda doba ma w nim dokładnie 86 400 sekund. Dzięki temu łatwo liczyć różnice dat, ale timestamp nie jest dokładną liczbą sekund fizycznie minionych od 1970 roku (różnica wynosi obecnie 27 sekund).

Problem roku 2038

Starsze systemy przechowują timestamp jako 32-bitową liczbę ze znakiem. Jej maksymalna wartość, 2 147 483 647, przypada na 19 stycznia 2038 o 03:14:07 UTC. Sekundę później licznik „przekręci się” na wartość ujemną, oznaczającą rok 1901. Współczesne systemy operacyjne i języki używają liczb 64-bitowych, ale problem może dotyczyć starych urządzeń wbudowanych, sterowników i baz danych z polami 32-bitowymi (np. typ TIMESTAMP w MySQL).

Różnice między datami

Różnica dwóch timestampów to liczba sekund między nimi — dzieląc przez 86 400, otrzymasz dni. Uwaga: przy zmianie czasu doba w czasie lokalnym ma 23 lub 25 godzin, więc do liczenia dni kalendarzowych i roboczych lepiej użyć kalkulatora dat.

Timestamp na datę (w Polsce i UTC) i odwrotnie zamienisz w konwerterze czasu Unix, który pokazuje też aktualny czas Unix na żywo.

Narzędzia do tego poradnika

Unix timestampczas Unixepochstrefy czasoweUTC2038

Przeczytaj też