Warum ist ein Datum aus dem 17. Jahrhundert möglich?
Windows speichert keine Zeitstempel für Dateiänderungen wie Unix-Systeme . Laut Windows Dev Center (Schwerpunkt Mine):
Eine Dateizeit ist ein 64-Bit-Wert, der die Anzahl der 100-Nanosekunden- Intervalle angibt , die seit dem 1. Januar 1601 (UTC) um 12:00 Uhr vergangen sind . Das System zeichnet die Dateizeiten auf, zu denen Anwendungen Dateien erstellen, darauf zugreifen und darauf schreiben.
Wenn Sie hier einen falschen Wert einstellen, können Sie problemlos Daten aus dem 17. Jahrhundert abrufen.
Eine andere wichtige Frage ist natürlich: Wie wurde dieser Wert festgelegt? Was ist das aktuelle Datum? Ich denke, Sie werden es nie herausfinden können, da dies einfach ein Rechenfehler im Dateisystemtreiber gewesen sein könnte. Eine andere Antwort geht davon aus, dass es sich bei dem Datum tatsächlich um einen Unix-Zeitstempel handelt, der als Windows-Zeitstempel interpretiert wird. Die Berechnung erfolgt jedoch in unterschiedlichen Intervallen (Sekunden vs. Nanosekunden).
In welcher Beziehung steht dies zum Problem des Jahres 2038?
Die Verwendung eines 64-Bit-Datentyps bedeutet, dass Windows (im Allgemeinen) nicht vom Problem des Jahres 2038 betroffen ist , das herkömmliche Unix-Systeme haben, da Unix anfänglich eine 32-Bit-Ganzzahl verwendete, die früher als die 64-Bit-Ganzzahl von Windows überläuft hat. (Dies ist trotz Unix-Betrieb in Sekunden und Windows-Betrieb in Mikro- / Nanosekunden.)
Windows ist natürlich weiterhin betroffen, wenn 32-Bit-Programme verwendet werden, die mit alten Versionen von Visual Studio kompiliert wurden.
Neuere Unix-Betriebssysteme haben den Datentyp bereits auf 64 Bit erweitert, wodurch das Problem vermieden wird. (Da Unix-Zeitstempel in Sekunden ausgeführt werden, liegt das neue Umlaufdatum in 292 Milliarden Jahren.)
Was ist das maximale Datum, das eingestellt werden kann?
Für die Neugierigen - so berechnen Sie das:
- Die Anzahl der möglichen Werte in einem 64-Bit - Integer sind 2 63 - 1 = 9223372036854775807 .
- Jeder Tick entspricht 100 Nanosekunden, was 0,1 µs oder 0,0000001 s entspricht.
- Der maximale Zeitbereich wäre 9223372036854775807 ⨉ 0,0000001 s , also Hunderte von Milliarden Sekunden.
- Eine Stunde hat 3600 Sekunden, ein Tag hat 86400 Sekunden und ein Jahr hat 365 Tage, also gibt es 86400 ⨉ 365 s = 31536000 s in einem Jahr. Dies ist natürlich nur ein Durchschnittswert, der Schaltjahre, Schaltsekunden oder Kalenderänderungen ignoriert, die zukünftige postapokalyptische Regime den verbleibenden Erdenbürgern diktieren könnten.
- 9223372036854775807 ⨉ 0,0000001 s / 31536000 s ≈ 29247 Jahre
@corsiKa
erklärt, wie wir Schaltjahre abziehen können: 29247/365/4 ≈ 20
- Ihr maximales Jahr ist also 1601 + 29247 - 20 = 30828 .
Einige Leute haben tatsächlich versucht, dies einzustellen und kamen mit dem gleichen Jahr.