czasatomowy.pl
Zgłoś błąd danych
Artykuł · 13 września 2026 · ok. 4 min czytania

Czas Unix i rok 2038: jak komputery liczą sekundy?

Czym jest timestamp Unix, dlaczego liczymy od 1 stycznia 1970 i na czym polega problem roku 2038 w starszych systemach.

Prawie każdy system, z którego korzystasz, zapisuje czas jako liczbę. Ta liczba nazywa się znacznikiem czasu Unix (ang. Unix timestamp) i oznacza liczbę sekund, które upłynęły od 1 stycznia 1970 roku, od godziny 00:00:00 UTC. W tym tekście wyjaśniamy, skąd wzięła się ta konwencja, jak działa i dlaczego w 2038 roku część starszych systemów może mieć kłopot.

Czym jest czas Unix?

Czas Unix to licznik sekund od ustalonego momentu zwanego epoką (ang. epoch). Epoką jest północ czasu uniwersalnego z 31 grudnia 1969 na 1 stycznia 1970. Przykładowo 22 października 2026 roku o godzinie 10:00 czasu polskiego letniego (czyli 08:00 UTC) timestamp wynosi 1792656000. Warto zauważyć, że nie zawiera on żadnej informacji o strefie czasowej: opisuje jednoznaczny moment w czasie, a zamianą na lokalną godzinę zajmuje się dopiero program, który go wyświetla. Jak powstaje UTC, wyjaśniamy w artykule Czas GPS, UTC i TAI.

Dlaczego akurat rok 1970?

System Unix powstawał na początku lat siedemdziesiątych w Bell Labs. Twórcy potrzebowali prostego, niedawnego punktu odniesienia, dlatego wybrano początek dekady, w której pracowali. Początkowo licznik liczył jednostki o innej długości i miał inną epokę, ale z czasem ustabilizowano go na sekundach od 1 stycznia 1970. Konwencja przyjęła się na tyle, że dziś używają jej systemy Linux, macOS, Android, a także języki programowania i bazy danych.

Zalety takiego zapisu

  • Jedna liczba zamiast skomplikowanej daty. Łatwo porównywać, sortować i odejmować momenty.
  • Niezależność od stref czasowych. Moment jest taki sam na całym świecie.
  • Prostota przy obliczeniach. Odstęp między zdarzeniami to zwykłe odejmowanie sekund.
MomentTimestamp (s)
1 stycznia 1970, 00:00:00 UTC0
1 stycznia 2000, 00:00:00 UTC946684800
22 października 2026, 08:00:00 UTC1792656000
19 stycznia 2038, 03:14:07 UTC2147483647

Sekundy przestępne a czas Unix

Czas Unix traktuje każdą dobę jako dokładnie 86 400 sekund. Dlatego nie liczy sekund przestępnych: w dniu, w którym dodano taką sekundę, systemy musiały ją „ukryć” (powtórzyć jedną sekundę albo rozmyć jej dodanie w czasie). To ważny szczegół dla programistów, bo zwykła różnica timestampów może nie oddawać dokładnej liczby sekund SI między zdarzeniami. Historię sekund przestępnych i planów ich wycofania opisujemy w tekście Sekunda przestępna odchodzi do historii.

Problem roku 2038

Wiele starszych programów zapisuje timestamp jako 32-bitową liczbę całkowitą ze znakiem. Największa wartość, jaką taka liczba może przyjąć, to 2 147 483 647, czyli 231 − 1. Ten moment przypada na 19 stycznia 2038 roku, godz. 03:14:07 UTC. Sekundę później licznik przekroczy zakres i w wielu implementacjach „przewinie się” do wartości ujemnej, interpretowanej jako 13 grudnia 1901 roku. Zjawisko nazywa się problemem roku 2038 albo „Y2K38”.

Dotyczy to głównie oprogramowania i urządzeń, które wciąż korzystają z 32-bitowych typów czasu: starszych systemów wbudowanych, niektórych formatów plików i protokołów, sterowników czy firmware’u. Współczesne systemy 64-bitowe używają 64-bitowego timestampu, który wystarczy na około 292 miliardy lat, więc w nich nie ma problemu.

Jak sprawdzić, czy to Cię dotyczy?

  1. Zidentyfikuj systemy i urządzenia, które mają działać po 2038 roku (kasy, sterowniki, liczniki, czujniki, sprzęt przemysłowy).
  2. Sprawdź, jaki typ danych czasu stosują. W kodzie szukaj 32-bitowych typów (np. int lub time_t w starszych kompilacjach).
  3. Sprawdź daty w przyszłości: kalendarze, umowy z terminem po 2038, daty wygaśnięcia certyfikatów lub licencji zapisane jako timestamp.
  4. Zaplanuj aktualizację oprogramowania lub wymianę sprzętu.

Warto pamiętać, że problem nie zaczyna się w 2038 roku. Dotyka każdego programu, który wcześniej oblicza daty z przyszłości, na przykład okresy ważności na 15 lat.

Timestamp w pigułce: przydatne wzory

  • Od timestampu do czasu lokalnego: dodaj przesunięcie strefy (np. +3600 s dla CET i +7200 s dla CEST).
  • Liczba dni od 1970: timestamp / 86400, zaokrąglona w dół.
  • Różnica czasu między dwoma zdarzeniami: zwykłe odejmowanie timestampów, wynik w sekundach.
  • Milisekundy: JavaScript i wiele API używa timestampów w milisekundach, czyli liczby 1000 razy większej.

Jeśli chcesz zobaczyć, jak komputer porównuje swój zegar z wzorcem, zajrzyj do artykułu Czym jest NTP. A jeśli wystarczy Ci obliczyć odstęp między dwiema godzinami w zwykłym zapisie, użyj kalkulatora odstępu czasowego. Serwis ma charakter informacyjny i nieoficjalny.

Dlaczego programiści wolą UTC?

Zapisywanie zdarzeń w UTC i przeliczanie na czas lokalny dopiero przy wyświetlaniu to jedna z najstarszych dobrych praktyk w informatyce. Zapis lokalny ma pułapki: godzina może wystąpić dwa razy (jesienią) albo nie wystąpić wcale (wiosną), a reguły stref zmieniają się z roku na rok. Timestamp jest od tych problemów wolny. Szczegóły dotyczące stref IANA i ich aktualizacji opisaliśmy m.in. w artykule o przygotowaniu do zmiany czasu.

Gdzie spotkasz timestampy na co dzień?

  • w nagłówkach plików i systemach plików (data modyfikacji),
  • w tokenach logowania i certyfikatach (czas ważności),
  • w dziennikach serwerów i bazach danych,
  • w aplikacjach, które pokazują „x minut temu”.

Jak zamienić timestamp na datę bez programu?

  1. Podziel liczbę przez 86 400, aby dostać liczbę pełnych dób od 1 stycznia 1970.
  2. Reszta z dzielenia to sekundy, które upłynęły od północy UTC danego dnia; podziel ją przez 3600, żeby uzyskać godziny, i resztę przez 60 na minuty.
  3. Dodaj 1 lub 2 godziny, jeśli chcesz godzinę w Polsce (zimą i latem odpowiednio).

Dla przykładu timestamp 1792656000 daje po podzieleniu przez 86 400 liczbę 20 748 dób od epoki i resztę równą 28 800 sekund, czyli dokładnie 8 godzin, co odpowiada 08:00 UTC. Jeśli nie chcesz liczyć ręcznie, odstęp między dwoma godzinami możesz sprawdzić w kalkulatorze odstępu czasowego, a godzinę w innym mieście w przeliczniku różnicy czasu.

← Wszystkie artykuły

Zobacz także