Konwerter znaczników czasu Unix

Konwertuj znaczniki czasu Unix na daty i odwrotnie.

O tym narzędziu

Konwertuj znaczniki czasu Unix w sekundach, milisekundach lub mikrosekundach na ISO 8601, czas lokalny i czas względny albo zamień dowolny ciąg z datą z powrotem na znacznik czasu.

Jak z tego korzystać

  1. Wklej znacznik czasu Unix w sekundach, milisekundach lub mikrosekundach albo dowolny ciąg z datą.
  2. Jednostka jest wykrywana na podstawie liczby cyfr.
  3. Odczytaj datę w formacie ISO 8601, czasie lokalnym, RFC 2822 i w formie względnej, a potem skopiuj to, czego potrzebujesz.

Pytania

Czym jest znacznik czasu Unix?
Liczba sekund od 1 stycznia 1970 00:00:00 UTC, czyli od tzw. epoki Uniksa. Jest taka sama na całym świecie, dzięki czemu idealnie nadaje się do zapisywania momentów w czasie.
Sekundy czy milisekundy?
Bieżący znacznik czasu w sekundach ma 10 cyfr, a w milisekundach 13. Narzędzia uniksowe i większość API używa sekund; Date.now() w JavaScripcie zwraca milisekundy.
Czym jest problem roku 2038?
Systemy, które przechowują znaczniki czasu jako 32-bitowe liczby ze znakiem, przepełnią się 19 stycznia 2038 roku. Nowoczesne systemy używają wartości 64-bitowych i ten problem ich nie dotyczy.
Jak zapisuje się daty sprzed 1970 jako znaczniki czasu Unix?
Jako liczby ujemne. -86400 to 31 grudnia 1969 o 00:00 UTC, dzień przed epoką, a ten konwerter akceptuje znak minus. Niektóre starsze systemy i biblioteki odrzucają ujemne znaczniki czasu, więc sprawdź to, zanim zaczniesz w ten sposób przechowywać daty historyczne, np. daty urodzenia.
Czy znaczniki czasu Unix uwzględniają sekundy przestępne?
Nie. Czas Unix traktuje każdą dobę jako dokładnie 86 400 sekund i ignoruje sekundy przestępne. Gdy taka sekunda występuje, zegar systemowy powtarza sekundę albo, jak w Google i AWS, rozkłada ją na kilka godzin, co nazywa się smearingiem. W niemal wszystkich zastosowaniach możesz to spokojnie zignorować.
Jak przeliczyć znacznik czasu Unix w Excelu lub Arkuszach Google?
Użyj =A1/86400 + DATE(1970,1,1) (w polskim Excelu: =A1/86400 + DATA(1970;1;1)) i sformatuj komórkę jako datę i godzinę. Wynik jest w UTC, więc dla czasu lokalnego dodaj swoje przesunięcie podzielone przez 24. Dla znacznika w milisekundach dziel przez 86400000 zamiast 86400.

Jak pobrać aktualny znacznik czasu Unix w dowolnym języku?

Większość języków zwraca bieżący czas epoch jednym wywołaniem. W JavaScripcie Date.now() zwraca milisekundy, więc dla sekund użyj Math.floor(Date.now() / 1000). time.time() w Pythonie zwraca sekundy jako liczbę zmiennoprzecinkową, a w powłoce date +%s wypisuje sekundy. Go ma time.Now().Unix(), Java Instant.now().getEpochSecond(), a PostgreSQL extract(epoch from now()). Na górze tej strony widać bieżącą wartość w sekundach i milisekundach.

W drugą stronę jest równie krótko: new Date(ts * 1000).toISOString() w JavaScripcie, datetime.fromtimestamp(ts, tz=timezone.utc) w Pythonie, date -d @1762540800 w Linuksie albo date -r 1762540800 w macOS. Najczęstszy błąd to mieszanie jednostek. Przekaż sekundy do funkcji oczekującej milisekund, a wylądujesz w styczniu 1970; przekaż milisekundy tam, gdzie oczekiwane są sekundy, a dostaniesz datę odległą o dziesiątki tysięcy lat w przyszłość.

ISO 8601 czy czas Unix: w jakim formacie zapisywać daty?

Czas Unix to pojedyncza liczba: łatwo ją porównywać, sortować i używać w obliczeniach, a do tego nie ma problemu ze strefami czasowymi. Ciągi ISO 8601, takie jak 2026-11-07T20:00:00Z, są czytelne dla ludzi i mogą zawierać przesunięcie, gdy jest potrzebne, jak w 2026-11-07T21:00:00+01:00. Oba opisują dokładny moment. RFC 3339 to ściślejszy, internetowy profil ISO 8601, którego w praktyce trzyma się większość API.

Dobra zasada: momenty w czasie przechowuj w natywnym typie timestamp albo jako czas Unix, a w API i logach wysyłaj ISO 8601 z Z albo z przesunięciem. Unikaj ciągów bez żadnej strefy, takich jak 2026-11-07 20:00, bo każdy czytający może założyć inną. Ten konwerter epoch odczytuje takie ciągi jako UTC i informuje o tym w notce. Rozumie też formaty logów, takie jak 06/Nov/2026:09:15:02 +0000.

Dlaczego przeliczony znacznik czasu różni się o kilka godzin?

Znacznik czasu Unix nie ma strefy czasowej; liczy sekundy od epoki w UTC. Jeśli przeliczona data wygląda na przesuniętą o kilka godzin, ze znacznikiem zwykle wszystko jest w porządku, a problem leży w wyświetlaniu. Porównaj tu wiersz ISO 8601 (UTC) z wierszem Lokalny: pokazują ten sam moment, raz w UTC, a raz w strefie czasowej Twojej przeglądarki. Kod formatujący daty bez strefy używa lokalnej strefy maszyny.

Inną częstą przyczyną jest znacznik czasu utworzony z lokalnego czasu zegarowego. W Pythonie klasycznym przykładem jest datetime.utcnow().timestamp(): naiwna wartość UTC jest traktowana jako czas lokalny, więc wynik różni się o Twoje przesunięcie względem UTC. Użyj zamiast tego datetime.now(timezone.utc). Różnica równa dokładnie 3600 lub 7200 sekund wskazuje na tego rodzaju błąd. Konwerter stref czasowych pokazuje, jaką godzinę wskazywał zegar w każdej strefie.

Ważne znaczniki czasu Unix

Kamienie milowe czasu Unix, w sekundach od 1 stycznia 1970 UTC.

Znacznik czasuData (UTC)Dlaczego to ważne
01970-01-01T00:00:00ZEpoch Unix: od tego momentu liczy się czas
10000000002001-09-09T01:46:40ZMiliard sekund
12345678902009-02-13T23:31:30ZCyfry od 1 do 0 po kolei, świętowane przez programistów
20000000002033-05-18T03:33:20ZDwa miliardy sekund
21474836472038-01-19T03:14:07ZNajwiększa 32-bitowa wartość ze znakiem: problem roku 2038
42949672952106-02-07T06:28:15ZNajwiększa 32-bitowa wartość bez znaku

Coś nie działa albo wynik wygląda na błędny? Zgłoś problem z tym narzędziem