Konwerter znacznika czasu Unix na datę

Konwertuj znacznik czasu Unix na czytelną datę i godzinę — lub dowolną datę z powrotem na znacznik czasu Unix. Obsługuje sekundy i milisekundy.

Udostępnij to narzędzie

Osadź na swojej stronie

Co to jest znacznik czasu Unix?

Znacznik czasu Unix, nazywany też czasem Unix lub czasem POSIX, to liczba sekund, które upłynęły od 1970-01-01 00:00:00 UTC, czyli tzw. epoki Unix. Jest to powszechnie używany standard w informatyce, ponieważ reprezentuje moment w czasie jako jedną liczbę całkowitą, co ułatwia przechowywanie, porównywanie i wykonywanie obliczeń.

JavaScript wewnętrznie operuje na milisekundach, dlatego Date.now() zwraca znacznik czasu Unix pomnożony przez 1000. Wiele API, baz danych i systemów backendowych używa zamiast tego sekund. To narzędzie akceptuje oba formaty i automatycznie rozpoznaje sekundy lub milisekundy na podstawie wielkości wprowadzonej liczby.

Ważne znaczniki czasu Unix

TimestampData (UTC)Uwagi
01970-01-01 00:00:00epoka Unix
1,000,000,0002001-09-09 01:46:401 miliard sekund
2,000,000,0002033-05-18 03:33:202 miliardy sekund
2,147,483,6472038-01-19 03:14:07problem roku 2038 (max 32-bit)

Dlaczego 1970?

Epoka Unix z 1 stycznia 1970 została wybrana częściowo z przyzwyczajenia, a częściowo z powodów praktycznych. Unix powstał pod koniec lat 60. i na początku lat 70. w Bell Labs. Twórcom potrzebna była niedawna, „okrągła” data początkowa dla reprezentacji czasu. 1 stycznia 1970 był wystarczająco „świeży”, by był praktyczny, i nie miał żadnego szczególnego znaczenia technicznego — był po prostu wygodnym punktem odniesienia.

W innych systemach występują inne epoki: epoka Windows FILETIME to 1 stycznia 1601; czas GPS zaczyna się 6 stycznia 1980; epoka NTP to 1 stycznia 1900. Przy konwersji między systemami znajomość epoki każdego z nich jest kluczowa.

Sekundy vs milisekundy

Oryginalny znacznik czasu Unix jest w sekundach. Większość języków i systemów po stronie serwera (powłoka Unix, time.time() w Pythonie, time() w PHP, większość baz danych) używa sekund. Date.now() i new Date().getTime() w JavaScripcie zwracają milisekundy. Ta rozbieżność jest częstym źródłem błędów, gdy frontend w JavaScripcie komunikuje się z backendowymi API.

Znacznik czasu Unix w sekundach ma obecnie 10 cyfr (około 1 700 000 000 w 2023). Znacznik w milisekundach ma 13 cyfr. Kalkulator rozpoznaje format na podstawie liczby cyfr i konwertuje odpowiednio.

Problem roku 2038

Systemy, które przechowują znaczniki czasu Unix jako signed 32-bit integer, mogą reprezentować daty tylko do 2,147,483,647 sekund po epoce — czyli do 03:14:07 UTC dnia 19 stycznia 2038. Po tym momencie 32-bitowa liczba całkowita ze znakiem przepełnia się do dużej liczby ujemnej, reprezentując datę w 1901 roku.

To bywa nazywane problemem „Y2K38” lub Unix Millennium Bug. Nowoczesne systemy 64-bitowe nie są podatne, ponieważ signed 64-bit integer może reprezentować znaczniki czasu przez około 292 miliardy lat. Jednak systemy wbudowane, starsze bazy danych i starsze oprogramowanie 32-bitowe mogą nadal być narażone. W wielu branżach — w tym w telekomunikacji, bankowości i systemach sterowania przemysłowego — trwają prace migracyjne, aby temu zaradzić.

Jak uzyskać bieżący znacznik czasu Unix

Język / środowiskoPolecenie
JavaScriptMath.floor(Date.now() / 1000)
Pythonimport time; int(time.time())
PHPtime()
Bashdate +%s
SQL (PostgreSQL)EXTRACT(EPOCH FROM NOW())::int
SQL (MySQL)UNIX_TIMESTAMP()
Gotime.Now().Unix()
RustSystemTime::now().duration_since(UNIX_EPOCH).unwrap().as_secs()

Praktyczne zastosowania

Tworzenie API: API REST często używają znaczników czasu Unix w polach created_at, updated_at oraz dla dat wygaśnięcia tokenów. Taki znacznik jest niezależny od strefy czasowej i jednoznaczny — w przeciwieństwie do sformatowanych ciągów dat, które zależą od lokalizacji i konwencji formatowania.

Wygaśnięcie tokenów: JWT (JSON Web Tokens) używają znaczników czasu Unix dla pól exp (expiry) i iat (issued at). Token wygasa, gdy bieżący znacznik czasu przekroczy wartość exp. Obliczanie czasów wygaśnięcia — np. „ten token ma wygasnąć za 24 godziny” — wymaga dodania 86 400 sekund do bieżącego znacznika czasu.

Cache TTL: Wygaśnięcie cache często ustawia się jako znacznik czasu Unix albo jako liczbę sekund od teraz. Debugowanie problemów z cache często wymaga przeliczenia zapisanego znacznika wygaśnięcia na czytelną datę.

Analiza logów: Logi serwerowe często zawierają znaczniki czasu Unix. Konwersja do czytelnych dat jest pierwszym krokiem w korelowaniu wpisów z realnymi zdarzeniami.

Przechowywanie w bazie danych: Przechowywanie znaczników czasu jako liczb całkowitych zamiast sformatowanych stringów ogranicza błędy konwersji stref czasowych i upraszcza sortowanie, zapytania zakresowe oraz arytmetykę. Zapytanie o „wszystkie rekordy z ostatnich 7 dni” może wyglądać jak WHERE created_at > (NOW_UNIX - 604800).

Powiązane artykuły