Jeśli kiedykolwiek przeglądałeś bazę danych lub pracowałeś z nowoczesnym interfejsem API, prawdopodobnie widziałeś zwracane daty nie jako „12 października 2026 r.”, ale jako ogromny, zastraszający ciąg liczb, taki jak 1791800000. To jest znacznik czasu Uniksa i stanowi uniwersalny szkielet pomiaru czasu w informatyce.
Obsługa dat i godzin w programowaniu jest niezwykle trudna. Strefy czasowe się zmieniają, czas letni zaczyna się i kończy w nieprzewidywalny sposób, a lata przestępne wprowadzają dodatkowe dni. Aby rozwiązać tę chaotyczną rzeczywistość, inżynierowie, którzy zbudowali system operacyjny Unix, postanowili wymyślić własną absolutną oś czasu.
Pochodzenie: 1 stycznia 1970 r
Unixowy znacznik czasu to po prostu liczba sekund, które upłynęły od 1 stycznia 1970 r. o godzinie 00:00:00 UTC. Ten dokładny moment w historii znany jest jako „epoka Uniksa”.
Dlaczego 1970? Ponieważ na początku lat 70. przechowywanie było niewiarygodnie drogie. Przechowywanie daty w postaci ciągu czytelnego dla człowieka, np. „1970-01-01 00:00:00”, zajmuje prawie 20 bajtów pamięci. Zapisanie go jako pojedynczej 32-bitowej liczby całkowitej zajęło tylko 4 bajty. Przyjmując punkt wyjścia w pobliżu czasu wynalezienia Uniksa, zmaksymalizowali ilość przyszłego czasu, jaki mogli przechowywać w tych 4 bajtach.
Dlaczego programiści uwielbiają znaczniki czasu Uniksa
Głównym powodem, dla którego czas uniksowy jest powszechnie stosowany w interfejsach API, bazach danych i mikrousługach, jest to, że nie ma on strefy czasowej. Reprezentuje pojedynczy, absolutny moment w czasie na całym świecie.
Jeśli zapiszesz wydarzenie w bazie danych przy użyciu czasu lokalnego serwera („15:00 EST”), a później przeniesiesz serwer do Londynu, wszystkie Twoje obliczenia zostaną załamane. Jeśli jednak zdarzenie ma miejsce o sygnaturze czasowej 1700000000, liczba ta jest identyczna niezależnie od tego, czy użytkownik wysyłający zapytanie znajduje się w Tokio, Nowym Jorku czy Paryżu. Aplikacja frontendowa po prostu pobiera tę liczbę całkowitą i matematycznie konwertuje ją na lokalną strefę czasową użytkownika na jego ekranie.
Natychmiastowa konwersja znaczników czasu
Nie próbuj liczyć sekund w myślach. Skorzystaj z naszego narzędzia offline, aby natychmiast przetłumaczyć 10-cyfrowe lub 13-cyfrowe znaczniki czasu na daty czytelne dla człowieka w lokalnej strefie czasowej.
Otwórz konwerter znaczników czasuSekundy a milisekundy (reguła 10 i 13 cyfr)
Jednym z najczęstszych błędów w tworzeniu stron internetowych jest przekazywanie znacznika czasu do funkcji i pobieranie daty w roku 1970 lub 52 000. Dzieje się tak z powodu pomieszania sekund i milisekund.
- Standardowy czas uniksowy (sekundy): 10-cyfrowa liczba (np.
1700000000). Jest to standard w systemie Linux, PHP i większości baz danych typu backend, takich jak MySQL. - Czas JavaScript (milisekundy): 13-cyfrowa liczba (np.
1700000000000). FunkcjaDate.now()JavaScript uwzględnia milisekundy, co zapewnia większą precyzję.
Jeśli wprowadzisz do JavaScript 10-cyfrowy znacznik czasu backendu bez mnożenia go przez 1000, JavaScript założy, że mówisz o pierwszych dniach stycznia 1970 roku.
// Correctly handling a Unix timestamp in JavaScript
const backendTimestamp = 1700000000;
const dateObject = new Date(backendTimestamp * 1000);
console.log(dateObject.toLocaleDateString()); // Converts to local user timezone
Problem roku 2038 (Y2K38)
Czas uniksowy ma zbliżający się termin. Ponieważ pierwotnie była przechowywana jako 32-bitowa liczba całkowita ze znakiem, maksymalna liczba, jaką może pomieścić, to 2 147 483 647.
19 stycznia 2038 r. o godzinie 03:14:07 UTC zegar uniksowy osiągnie tę maksymalną wartość. Sekundę później liczba całkowita zostanie przepełniona i zmieni się na liczbę ujemną. Starsze systemy, które nie zostały zaktualizowane do architektury 64-bitowej, nagle uznają, że jest rok 1901, co powoduje katastrofalne awarie oprogramowania na całym świecie.
Na szczęście prawie cały nowoczesny sprzęt, bazy danych i języki programowania (takie jak 64-bitowe jądra Linuksa i nowoczesny Node.js) przeszły już na czas 64-bitowy, wypychając kolejny nadmiar o miliardy lat w przyszłość.
Często zadawane pytania (FAQ)
Czy czas uniksowy uwzględnia sekundy przestępne?
Co zaskakujące, nie. Czas uniksowy zakłada, że każdy dzień ma dokładnie 86 400 sekund. Kiedy świat dodaje „sekundę przestępną”, aby dostosować się do obrotu Ziemi, systemy Unix zazwyczaj po prostu powtarzają ten sam znacznik czasu dwukrotnie, aby zachować synchronizację bez zakłócania obliczeń matematycznych.
Czy znacznik czasu Uniksa może być ujemny?
Tak. Każdy znacznik czasu mniejszy niż 0 reprezentuje datę poprzedzającą epokę Uniksa (1 stycznia 1970). Na przykład -86400 oznacza dokładnie 31 grudnia 1969 r.
Dlaczego moja przeliczona data zawsze wyświetla się jako rok 1970?
Prawdopodobnie przekazujesz 10-cyfrowy znacznik czasu do funkcji, która oczekuje 13 cyfr (milisekund). Przed konwersją pomnóż swój znacznik czasu przez 1000.