Konwerter znaczników czasu: Kompletny przewodnik
Znaczniki czasu są fundamentalne w programowaniu, ale praca z czasem i strefami czasowymi jest notorycznie trudna. Ten przewodnik wyjaśnia znaczniki czasu Unix, ISO 8601, strefy czasowe i najlepsze praktyki dla obsługi dat i czasu w Twoich aplikacjach.
Czym są znaczniki czasu Unix?
Znacznik czasu Unix (również znany jako czas Epoch lub czas POSIX) to sposób śledzenia czasu jako pojedynczej liczby. Reprezentuje liczbę sekund, które upłynęły od Unix Epoch: 00:00:00 UTC w czwartek, 1 stycznia 1970 roku, nie licząc sekund przestępnych. Dlaczego 1 stycznia 1970? Epoch Unix był ustalany, gdy systemy Unix były rozwijane. Potrzebowali punktu referencyjnego, a 1970-01-01 został wybrany jako dogodny, okrągły początek. To było współczesne na czas rozwoju Unix (późne lata 60., wczesne lata 70.), co czyniło starsze daty rzadkimi, a przyszłe daty daleko w przyszłości. Reprezentacja pojedynczej liczby: Obecny czas: 1704067200 (przykład — reprezentuje konkretny moment). Pozytywne liczby = po 1970-01-01, Negatywne liczby = przed 1970-01-01 (rzadko używane, ale prawidłowe). Milisekundy: JavaScript i niektóre systemy używają milisekund (13 cyfr). Sekundy: Tradycyjne Unix (10 cyfr), używane przez większość backendów. Zalety znaczników czasu Unix: Prosty — tylko pojedyncza liczba, łatwa do przechowywania i porównywania. Nie zależy od strefy czasowej — reprezentuje uniwersalny moment w czasie. Compact — liczba całkowita zajmuje mniej miejsca niż formatowany ciąg daty. Matematyka jest łatwa — odejmij aby uzyskać czas trwania, dodaj aby przesunąć do przodu. Sortowalna — numeryczne sortowanie daje chronologiczną kolejność. Uniwersalny — zrozumiały przez wszystkie systemy i języki. Ograniczenia: Problem 2038 — 32-bitowe liczby całkowite przepełnią się 19 stycznia 2038 o 03:14:07 UTC. Nowoczesne systemy używają 64-bitowych liczb całkowitych, rozwiązując to. Nie czytelne dla człowieka — 1704067200 nie mówi Ci nic z pierwszego rzutu oka. Precision — standardowy Unix używa sekund, JavaScript używa milisekund. Strefy czasowe — nie są przechowywane, musisz obsługiwać konwersję oddzielnie. Sekundy przestępne — nie są uwzględniane (czasami kontrowersyjne).
ISO 8601 i formatowanie daty
ISO 8601 jest międzynarodowym standardem dla reprezentacji dat i czasów jako ciągów. Zapewnia jednoznaczny, zrozumiały format, który jest zarówno czytelny dla człowieka, jak i do przetwarzania maszynowego. Format podstawowy: YYYY-MM-DDTHH:mm:ss.sssZ. 2024-01-01T12:30:45.123Z. YYYY = rok (4 cyfry), MM = miesiąc (01-12), DD = dzień (01-31), T = separator między datą a czasem, HH = godziny (00-23), mm = minuty (00-59), ss = sekundy (00-59), sss = milisekundy (opcjonalne), Z = UTC (lub offset strefy czasowej). Offsety strefy czasowej: Z = UTC (zerowe przesunięcie), +HH:mm = przed UTC (np. +05:30 dla Indii), -HH:mm = za UTC (np. -05:00 dla EST). Przykład: 2024-01-01T12:30:45+01:00 (CET). Przykład: 2024-01-01T12:30:45-08:00 (PST). Zalety ISO 8601: Czytelne dla człowieka — możesz odczytać datę bez narzędzi. Jednoznaczne — brak zamieszania amerykańskiego (MM/DD) vs europejskiego (DD/MM). Sortowalne — sortowanie alfanumeryczne daje chronologiczną kolejność. Standardowe — uniwersalnie uznane i wspierane. Strefa czasowa — może zawierać informacje o strefie czasowej. Warianty: Tylko data: 2024-01-01. Tylko czas: 12:30:45. Data i czas (lokalny): 2024-01-01T12:30:45 (brak Z lub offsetu). Data i czas (UTC): 2024-01-01T12:30:45Z. Z offsetem: 2024-01-01T12:30:45+01:00. Typowe formaty nie-ISO: US: 01/01/2024 (zamieszanie miesiąc/dzień). EU: 01.01.2024 (jasny, ale niestandardowy). RFC 2822: Mon, 01 Jan 2024 12:30:45 +0000 (używany w e-mailach). Niestandardowe: 1 stycznia 2024, 12:30 PM (łatwe do odczytania, trudne do parsowania). Najlepsza praktyka: Zawsze przechowuj znaczniki czasu w UTC. Konwertuj do lokalnej strefy czasowej użytkownika dla wyświetlania. Używaj ISO 8601 dla czyteln ości, Unix dla obliczeń. Zawsze uwzględniaj informacje o strefie czasowej. Nigdy nie polegaj na domyślnych strefach czasowych serwera.
Strefy czasowe i DST
Strefy czasowe są jednym z najtrudniejszych aspektów programowania daty/czasu. Zrozumienie, jak działają i typowych pułapek pomaga uniknąć błędów subtelnych. Podstawy stref czasowych: Ziemia jest podzielona na strefy czasowe w oparciu o długość geograficzną. UTC (Coordinated Universal Time) jest standardem referencyjnym. Strefy czasowe są offsetami od UTC: UTC+0 (Londyn, Lizbona — podczas standardowego czasu), UTC+1 (Paryż, Berlin, Warszawa — podczas standardowego czasu), UTC-5 (Nowy Jork — podczas standardowego czasu), UTC+5:30 (Indie — zauważ przesunięcie 30-minutowe). Czas letni (DST): Wiele regionów przesuwa zegary do przodu o 1 godzinę latem. Wiosna: "tracisz" godzinę (2:00 AM staje się 3:00 AM). Jesień: "zyskujesz" godzinę (2:00 AM występuje dwukrotnie). Nie wszystkie strefy czasowe używają DST. DST zaczyna się/kończy w różnych datach w różnych miejscach. Niektóre kraje/regiony przeszły na nie obserwowanie DST. Nazwy stref czasowych: UTC: Coordinated Universal Time (standardowa referencyjna). GMT: Greenwich Mean Time (podobnie do UTC, ale technicznie inaczej). EST/EDT: Eastern Standard/Daylight Time (US). CET/CEST: Central European Time/Summer Time. PST/PDT: Pacific Standard/Daylight Time (US). Używaj offsetów (UTC+01:00) zamiast akronimów (CST może znaczyć: Central Standard Time US, China Standard Time, Cuba Standard Time). Baza danych IANA Timezone: Autorytatywna baza danych stref czasowych. Nazwy jak: America/New_York, Europe/Warsaw, Asia/Tokyo. Uwzględnia zmiany historyczne i przyszłe. Używaj tych nazw dla wiarygodnego obsługiwania stref czasowych. Większość języków/bibliotek używa tej bazy danych. Typowe błędy: Zakładanie UTC, gdy nie jest to określone. Ignorowanie DST — obliczenia mogą być o godzinę nieprawidłowe. Używanie strefy czasowej serwera zamiast strefy użytkownika. Porównywanie znaczników czasu bez normalizacji do UTC. Twardokodowanie przesunięć strefy czasowej (zmieniają się z DST). Pomijanie historycznych zmian strefy czasowej. Zakładanie wszystkie strefy mają przesunięcia całej godziny (nie: Indie UTC+5:30). Najlepsze praktyki: Przechowuj wszystko w UTC w bazie danych. Konwertuj do lokalnej strefy czasowej użytkownika dla wyświetlania. Używaj bibliotek stref czasowych (Moment Timezone, Luxon, date-fns-tz). Zawsze uwzględniaj informacje o strefie czasowej w znacznikach czasu. Test z użytkownikami w różnych strefach czasowych. Rozważ przejścia DST w logice biznesowej. Zapisz oryginalną strefę czasową użytkownika, jeśli jest istotna. Używaj nazw IANA strefy czasowej, nie akronimów.
Wypróbuj Narzędzie
Konwerter Timestamp
Dowiedz się więcej
Czym jest znacznik czasu Unix?
Znaczniki czasu Unix są wszędzie w programowaniu, ale wielu programistów ich używa nie do końca rozumiejąc, jak działają. Ten przewodnik wyjaśnia wszystko, co musisz wiedzieć.
Problem roku 2038
Problem roku 2038 jest zbliżającym się wyzwaniem dla systemów 32-bitowych. Zrozumienie problemu i rozwiązań pomaga zapewnić, że Twoje aplikacje przetrwają.
FAQ
Konwerter Timestamp
FAQ →