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ć
- Wklej znacznik czasu Unix w sekundach, milisekundach lub mikrosekundach albo dowolny ciąg z datą.
- Jednostka jest wykrywana na podstawie liczby cyfr.
- 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 czasu | Data (UTC) | Dlaczego to ważne |
|---|---|---|
0 | 1970-01-01T00:00:00Z | Epoch Unix: od tego momentu liczy się czas |
1000000000 | 2001-09-09T01:46:40Z | Miliard sekund |
1234567890 | 2009-02-13T23:31:30Z | Cyfry od 1 do 0 po kolei, świętowane przez programistów |
2000000000 | 2033-05-18T03:33:20Z | Dwa miliardy sekund |
2147483647 | 2038-01-19T03:14:07Z | Największa 32-bitowa wartość ze znakiem: problem roku 2038 |
4294967295 | 2106-02-07T06:28:15Z | Największa 32-bitowa wartość bez znaku |
Coś nie działa albo wynik wygląda na błędny? Zgłoś problem z tym narzędziem