Dlaczego możliwa jest data z 1600 roku?
System Windows nie przechowuje znaczników czasu modyfikacji plików, tak jak robią to systemy uniksowe . Według Windows Dev Center (moje podkreślenie):
Czas pliku to 64-bitowa wartość, która reprezentuje liczbę 100 nanosekundowych interwałów, które upłynęły od godziny 12:00 1 stycznia 1601 Uniwersalny czas koordynowany (UTC). System rejestruje czasy plików, gdy aplikacje tworzą, uzyskują dostęp i zapisują pliki.
Tak więc, ustawiając tutaj niewłaściwą wartość, możesz łatwo uzyskać daty z XVII wieku.
Oczywiście kolejnym ważnym pytaniem jest: w jaki sposób ustawiono tę wartość? Jaka jest rzeczywista data? Myślę, że nigdy nie będziesz w stanie się dowiedzieć, ponieważ mógł to być po prostu błąd obliczeniowy w sterowniku systemu plików. Inna odpowiedź zakłada hipotezę, że data jest w rzeczywistości uniksowym znacznikiem czasu interpretowanym jako znacznik czasu systemu Windows, ale w rzeczywistości są one obliczane w różnych odstępach czasu (sekundy w porównaniu do nanosekund).
Jak to się ma do problemu z 2038 r.?
Zastosowanie 64-bitowego typu danych oznacza, że na system Windows (ogólnie) nie ma wpływu problem z rokiem 2038 występujący w tradycyjnych systemach uniksowych, ponieważ Unix początkowo używał 32-bitowej liczby całkowitej, która przepełnia się wcześniej niż 64-bitowa liczba całkowita tego systemu Windows ma. (Dzieje się tak pomimo tego, że Unix działa w kilka sekund, a Windows w mikro / nanosekundach.)
Oczywiście Windows nadal ma wpływ na używanie 32-bitowych programów, które zostały skompilowane ze starszymi wersjami Visual Studio.
Nowsze systemy operacyjne Unix już rozszerzyły typ danych do 64 bitów, unikając w ten sposób problemu. (W rzeczywistości, ponieważ uniksowe znaczniki czasu działają w kilka sekund, nowa data zakończenia będzie za 292 miliardów lat.)
Jaka jest maksymalna data, którą można ustawić?
Dla ciekawskich - oto jak to obliczyć:
- Liczba możliwych wartości w 64-bitową liczbę całkowitą są 2 63 - 1 = 9223372036854775807 .
- Każdy tik reprezentuje 100 nanosekund, co stanowi 0,1 µs lub 0,0000001 s.
- Maksymalny zakres czasu wynosiłby 9223372036854775807 ⨉ 0,0000001 s , a więc setki miliardów sekund.
- Jedna godzina ma 3600 sekund, jeden dzień ma 86400 sekund, a jeden rok ma 365 dni, więc jest 86400 ⨉ 365 s = 31536000 s w ciągu roku. Jest to oczywiście tylko średnia, ignorująca lata przestępne, sekundy przestępne lub wszelkie zmiany kalendarza, które przyszłe postapokaliptyczne reżimy mogą narzucić pozostałym ziemianom.
- 9223372036854775807 ⨉ 0,0000001 s / 31536000 s ≈ 29247 lat
@corsiKa
wyjaśnia, w jaki sposób możemy odjąć lata przestępne: 29247/365/4 ≈ 20
- Twój maksymalny rok to 1601 + 29247 - 20 = 30828 .
Niektórzy ludzie próbowali to ustalić i wymyślili ten sam rok.