Zamiana znacznika czasu Unix na datę i daty na znacznik czasu
Opublikowano · Zaktualizowano 3 min czytania
Znacznik czasu Unix to liczba odliczająca czas, który upłynął od 1 stycznia 1970 o północy, w czasie uniwersalnym. Spotyka się go w bazach danych, dziennikach programów i interfejsach stron. Dwa pytania decydują o uzyskanej dacie: jednostka liczby i strefa czasowa, w której odczytuje się wynik.
Wartość wzorcowa
Konwertuj znacznik czasu Unix podaje trzy odczyty tego samego momentu. Dla 1700000000, przy przeglądarce ustawionej na czas paryski:
| Odczyt | Wynik |
|---|---|
| Data UTC | Tue, 14 Nov 2023 22:13:20 GMT |
| Data lokalna | 14 listopada 2023 o 23:13:20 UTC+1 |
| ISO | 2023-11-14T22:13:20.000Z |
Czas lokalny podąża za strefą czasową przeglądarki: zimą w Paryżu jest godzinę więcej. Ten sam znacznik czasu to jeden moment, odczytany w dwóch strefach czasowych.
Jednostkę rozpoznaje się po liczbie cyfr
Ustawienie domyślne rozpoznaje jednostkę po długości liczby. Trzy poniższe wartości oznaczają ten sam moment, z dokładnością do precyzji.
| Liczba | Cyfry | Rozpoznana jednostka | Uzyskany moment |
|---|---|---|---|
| 1700000000 | 10 | Sekundy | 14 lis 2023, 22:13:20 UTC |
| 1700000000000 | 13 | Milisekundy | 14 lis 2023, 22:13:20 UTC |
| 1700000000123456 | 16 | Mikrosekundy | 14 lis 2023, 22:13:20.123 UTC |
Reguła: do 11 cyfr sekundy; od 12 do 14 milisekundy; 15 i 16 mikrosekundy. Ustawienie „milisekundy” wymusza tę jednostkę.
Pułapka reguły
Ponieważ jednostkę wnioskuje się z długości, wartość niejednoznaczna jest odczytywana tylko w jeden sposób: 10000000000 (11 cyfr) daje 20 listopada 2286, a 100000000000 (12 cyfr) 3 marca 1973. Znacznik czasu w milisekundach sprzed marca 1973 ma 11 cyfr lub mniej i zostałby odczytany jako sekundy: należy wtedy wymusić ustawienie „milisekundy”.
Wartości sprzed 1970 i granica roku 2038
Liczba ujemna oznacza moment sprzed 1970: −1 daje 31 grudnia 1969 o 23:59:59 UTC, a 0 daje 1 stycznia 1970 o północy.
Liczba 2147483647 jest największą, jaką może pomieścić 32-bitowa liczba całkowita ze znakiem: daje 19 stycznia 2038 o 03:14:07 UTC. Następna liczba, 2147483648, daje 03:14:08. Narzędzie działa dalej bez limitu, ale system przechowujący czas na 32 bitach nie może: to „błąd roku 2038”.
Zamiana daty na znacznik czasu
Wpisz datę zamiast liczby: narzędzie poda znacznik czasu w sekundach i w milisekundach.
| Dane wejściowe | Znacznik czasu w sekundach | Odczyt |
|---|---|---|
| 2026-01-01 | 1767225600 | Północ w czasie uniwersalnym, bez podanej strefy czasowej |
| 2026-01-01T10:30:00+01:00 | 1767259800 | 10:30 w Paryżu, czyli 09:30 w czasie uniwersalnym |
| 2024-02-29 | 1709164800 | Rok przestępny zaakceptowany |
Data bez strefy czasowej jest odczytywana w czasie uniwersalnym, a nie lokalnym: narzędzie przypomina o tym w wyniku. Data, która nie istnieje, jak 30 lutego 2026, jest odrzucana z komunikatem.
Częste błędy
- Odczytanie milisekund jako sekund: data ląduje tysiące lat za daleko.
- Zapomnienie o strefie czasowej: data odczytana jako lokalna, a następnie wysłana jako uniwersalna, przesuwa się o godzinę lub więcej.
- Zapisanie daty bez strefy czasowej w myśl o czasie lokalnym, gdy zostanie odczytana w czasie uniwersalnym.
Aby policzyć dni między dwiema datami, zobacz Liczenie dni między dwiema datami.
Dla jakich przypadków
Dziennik programu, baza danych, odpowiedź usługi internetowej lub wyeksportowany plik: liczbę trudno odczytać, datę odczytuje się od razu.
Sprawdzenie konwersji
- Przeczytaj ponownie wiersz UTC, który nie zależy od urządzenia.
- Sprawdź jednostkę podaną w pierwszym wierszu wyniku.
- Skonwertuj uzyskaną datę z powrotem: powinna wrócić liczba wyjściowa.
Najczęściej zadawane pytania
- Czym jest znacznik czasu Unix?
- Liczbą sekund, które upłynęły od 1 stycznia 1970 o północy, w czasie uniwersalnym.
- Jak poznać, czy liczba jest w sekundach, czy w milisekundach?
- Narzędzie wnioskuje to z liczby cyfr: do 11 cyfr sekundy; od 12 do 14 milisekundy; 15 i 16 mikrosekundy.
- Co się stanie w 2038?
- Liczba 2147483647, największa 32-bitowa liczba całkowita ze znakiem, odpowiada 19 stycznia 2038. System przechowujący czas na 32 bitach nie może pójść dalej.
- Jakiej strefy czasowej używa się dla daty bez strefy?
- Czasu uniwersalnego, a nie lokalnego. Narzędzie przypomina o tym w wyniku.
