ToolHub
View All Posts

Uniksowe znaczniki czasu szczegółowo: Konwersja między formatami

Uniksowe znaczniki czasu są jednym z najbardziej podstawowych pojęć w informatyce, ale wielu programistów i specjalistów ds. danych nadal ma z nimi trudności. Niezależnie od tego, czy debugujesz odpowiedzi API, analizujesz pliki dziennika, czy budujesz systemy harmonogramowania, zrozumienie działania uniksowych znaczników czasu i sposobu konwersji między formatami jest niezbędną umiejętnością.

Czym jest uniksowy znacznik czasu?

Uniksowy znacznik czasu, znany również jako czas epoch lub czas POSIX, to liczba sekund, które upłynęły od 1 stycznia 1970 00:00:00 UTC (z wyłączeniem sekund przestępnych). Ten punkt odniesienia nazywany jest epoką Unix. Znaczniki czasu są przechowywane jako pojedyncza liczba całkowita, co ułatwia porównywanie, sortowanie i obliczanie różnic czasu.

Na przykład, uniksowy znacznik czasu 1700000000 odpowiada 14 listopada 2023 22:13:20 UTC. Prostota reprezentowania czasu jako pojedynczej liczby sprawia, że uniksowe znaczniki czasu są standardem reprezentacji czasu w systemach operacyjnych, bazach danych i językach programowania.

Dlaczego używać uniksowych znaczników czasu

Popularne formaty znaczników czasu

Różne systemy używają różnych formatów znaczników czasu. Zrozumienie tych różnic pomaga dokładnie konwertować między nimi.

FormatPrzykładUżywany przez
Unix sekundy1700000000Linux, API, bazy danych
Unix milisekundy1700000000000JavaScript, Java
Unix mikrosekundy1700000000000000Python, Go
ISO 86012023-11-14T22:13:20ZREST API, JSON
RFC 2822Tue, 14 Nov 2023 22:13:20 +0000Nagłówki e-mail, HTTP

Konwersja uniksowych znaczników czasu na czytelną datę

W JavaScript

JavaScript reprezentuje znaczniki czasu w milisekundach. Aby przekonwertować uniksowy znacznik czasu w sekundach na obiekt Date JavaScript, najpierw pomnóż przez 1000. Następnie użyj metod takich jak toLocaleString() lub toISOString() do sformatowania wyniku.

W Pythonie

Moduł datetime Pythona oferuje metodę fromtimestamp() do konwersji uniksowych znaczników czasu na obiekty datetime. Python obsługuje również znaczniki czasu z precyzją mikrosekundową poprzez datetime.fromtimestamp(ts, tz=timezone.utc).

W wierszu poleceń

Na Linux i macOS polecenie date może konwertować znaczniki czasu. Użyj date -d @1700000000 na Linux lub date -r 1700000000 na macOS, aby uzyskać czytelną datę z uniksowego znacznika czasu.

Korzystanie z narzędzi online

Najszybszym sposobem konwersji znaczników czasu jest użycie konwertera online. Wklej swój znacznik czasu, a narzędzie natychmiast wyświetli odpowiadającą datę i godzinę (w wielu formatach). Wypróbuj nasz darmowy konwerter znaczników czasu do szybkich konwersji.

Konwersja daty na uniksowy znacznik czasu

Odwrotna konwersja — przekształcanie czytelnej daty na uniksowy znacznik czasu — jest równie ważna. Jest to często potrzebne przy wysyłaniu dat do API, przechowywaniu dat wybranych przez użytkownika lub planowaniu przyszłych zdarzeń.

W JavaScript utwórz obiekt Date i wywołaj getTime(), aby uzyskać znacznik czasu w milisekundach, a następnie podziel przez 1000, aby uzyskać sekundy. W Pythonie użyj datetime.timestamp(), aby bezpośrednio uzyskać uniksowy znacznik czasu. Większość języków programowania oferuje podobne wbudowane metody.

Problem roku 2038

Systemy używające 32-bitowych liczb całkowitych ze znakiem do przechowywania uniksowych znaczników czasu przepełnią się 19 stycznia 2038 o 03:14:07 UTC. W tym momencie znacznik czasu osiągnie 2147483647, maksymalną wartość 32-bitowej liczby całkowitej ze znakiem, a następnie przekręci się do wartości ujemnych, powodując wyświetlanie dat z 1901 roku.

Ten problem jest znany jako problem roku 2038 lub Y2K38 i dotyczy starszych systemów oraz urządzeń wbudowanych. Rozwiązaniem jest używanie 64-bitowych liczb całkowitych do przechowywania znaczników czasu, co rozszerza reprezentowalny zakres do około 292 miliardów lat. Większość nowoczesnych systemów operacyjnych, baz danych i języków programowania przeszła już na 64-bitowe znaczniki czasu.

Wskazówka dla programistów: Zawsze używaj 64-bitowych liczb całkowitych podczas przechowywania znaczników czasu w bazach danych i API. Jeśli używasz JavaScript, pamiętaj, że Date.getTime() zwraca milisekundy, a nie sekundy. Dziel przez 1000 podczas interakcji z systemami oczekującymi sekund.

Obsługa stref czasowych

Uniksowe znaczniki czasu zawsze używają UTC, eliminując niejednoznaczność stref czasowych. Jednak wyświetlanie znaczników czasu użytkownikom wymaga konwersji na ich lokalną strefę czasową. Oto kluczowe uwagi:

Częste pułapki

Potrzebujesz konwersji między uniksowymi znacznikami czasu a czytelnymi datami? Wypróbuj nasz darmowy konwerter znaczników czasu.

Wypróbuj konwerter znaczników czasu

FAQ

Czym jest epoka Unix?

Epoka Unix to 1 stycznia 1970 00:00:00 UTC. Służy jako punkt odniesienia dla wszystkich obliczeń uniksowych znaczników czasu. Znacznik czasu reprezentuje liczbę sekund, które upłynęły od tego momentu.

Czy uniksowe znaczniki czasu się wyczerpią?

Znaczniki czasu Unix jako 32-bitowe liczby całkowite ze znakiem przekroczą zakres 19 stycznia 2038 roku, znane jako problem roku 2038. Systemy używające 64-bitowych liczb całkowitych nie będą miały tego problemu przez około 292 miliardy lat. Większość nowoczesnych systemów przeszła na 64-bitowe znaczniki czasu.

Czy uniksowe znaczniki czasu zależą od strefy czasowej?

Nie, uniksowe znaczniki czasu zawsze używają UTC i nie zależą od strefy czasowej. Ten sam znacznik czasu reprezentuje ten sam moment na całym świecie. Konwersja strefy czasowej zachodzi tylko podczas wyświetlania znacznika czasu jako czytelnej daty.

Jaka jest różnica między sekundami a milisekundami w znacznikach czasu?

Standardowe uniksowe znaczniki czasu mierzą czas od epoki w sekundach, podczas gdy JavaScript i niektóre API używają milisekund. Milisekundowe znaczniki czasu są 1000 razy większe niż znaczniki sekundowe. Na przykład, 1700000000 sekund to 1700000000000 milisekund.

Czy sekundy przestępne wpływają na uniksowe znaczniki czasu?

Technicznie rzecz biorąc, uniksowe znaczniki czasu ignorują sekundy przestępne. Każdy dzień jest traktowany jako mający dokładnie 86400 sekund. Oznacza to, że gdy wstawiana jest sekunda przestępna, czas Unix może nieznacznie odbiegać od UTC, ale w praktyce rzadko powoduje to problemy.