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
Powiązane narzędzia
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
| Timestamp | Data (UTC) | Uwagi |
|---|---|---|
0 | 1970-01-01 00:00:00 | epoka Unix |
1,000,000,000 | 2001-09-09 01:46:40 | 1 miliard sekund |
2,000,000,000 | 2033-05-18 03:33:20 | 2 miliardy sekund |
2,147,483,647 | 2038-01-19 03:14:07 | problem 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 / środowisko | Polecenie |
|---|---|
| JavaScript | Math.floor(Date.now() / 1000) |
| Python | import time; int(time.time()) |
| PHP | time() |
| Bash | date +%s |
| SQL (PostgreSQL) | EXTRACT(EPOCH FROM NOW())::int |
| SQL (MySQL) | UNIX_TIMESTAMP() |
| Go | time.Now().Unix() |
| Rust | SystemTime::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
Jak używać uniksowych znaczników czasu do zapytań o zakresy datZapytania o zakresy dat to jedna z najczęstszych operacji bazodanowych. Uniksowe znaczniki czasu sprawiają, że są szybsze, prostsze i bezpieczne dla stref czasowych. Oto jak robić to prawidłowo.
Znaczniki czasu Uniksa w zaplanowanych zadaniach i zadaniach cronZadania cron i zaplanowane zadania stale mają do czynienia z czasem — kiedy uruchomić, ile czasu minęło od ostatniego uruchomienia, czy zadanie jest opóźnione. Oto jak znaczniki czasu Uniksa wpisują się w systemy szeregowania zadań i jak ich używać, aby pisać bardziej niezawodną logikę zadań.
Znaczniki czasu Unix w zabezpieczeniach i uwierzytelnianiu — Wygaśnięcie tokenów, sesje i ograniczanie częstotliwościSystemy bezpieczeństwa zależą od precyzyjnego pomiaru czasu. Dowiedz się, jak znaczniki czasu Unix są wykorzystywane w tokenach uwierzytelniania, zarządzaniu sesją, ograniczaniu częstotliwości żądań i zapobieganiu atakom powtórzeń.