Pourquoi une date des années 1600 est-elle possible?
Windows ne stocke pas les horodatages de modification de fichiers, contrairement aux systèmes Unix . Selon le centre de développement Windows (emphase moi):
Une heure de fichier est une valeur de 64 bits représentant le nombre d' intervalles de 100 nanosecondes qui se sont écoulés depuis 00h00 le 1er janvier à 16 h 01, heure normale de la coordination (UTC). Le système enregistre les temps de fichier lorsque les applications créent, accèdent et écrivent dans des fichiers.
Donc, en définissant une mauvaise valeur ici, vous pouvez facilement obtenir les dates des années 1600.
Bien sûr, une autre question importante est: comment cette valeur a-t-elle été définie? Quelle est la date actuelle? Je pense que vous ne pourrez jamais le savoir, car cela aurait pu être simplement une erreur de calcul dans le pilote du système de fichiers. Une autre réponse suppose que la date est en réalité un horodatage Unix interprété comme un horodatage Windows, mais qu’il est en fait calculé à des intervalles différents (secondes par rapport aux nanosecondes).
Comment cela est-il lié au problème de l'année 2038?
L'utilisation d'un type de données 64 bits signifie que Windows (en général) n'est pas concerné par le problème de l' an 2038, car les systèmes Unix traditionnels ont déjà utilisé un entier 32 bits, qui déborde plus tôt que l'entier 64 bits défini par Windows. a. (Ceci malgré le système Unix fonctionnant sur secondes et Windows fonctionnant sur micro / nanosecondes.)
Windows est toujours concerné par les programmes 32 bits compilés avec les anciennes versions de Visual Studio, bien sûr.
Les systèmes d'exploitation Unix plus récents ont déjà étendu le type de données à 64 bits, évitant ainsi le problème. (En fait, étant donné que les horodatages Unix fonctionnent en quelques secondes, la nouvelle date enveloppante sera dans 292 milliards d’années.)
Quelle est la date maximum pouvant être définie?
Pour les curieux, voici comment calculer cela:
- Le nombre de valeurs possibles dans un entier 64 bits est compris entre 2 63 - 1 = 9223372036854775807 .
- Chaque tick correspond à 100 nanosecondes, soit 0,1 µs ou 0,0000001 s.
- La plage de temps maximale serait de 9223372036854775807 ⨉ 0.0000001 s , soit des centaines de milliards de secondes.
- Une heure a 3 600 secondes, un jour, 86 400 secondes et un an, 365 jours. Il y a donc 86 400 × 365 s = 31536000 s par an. Ceci, bien sûr, n’est qu’une moyenne, ignorant les années bissextiles, les secondes intercalaires ou tout changement de calendrier que les futurs régimes postapocalyptiques pourraient imposer aux terriens restants.
- 9223372036854775807 ⨉ 0,0000001 s / 31536000 s ≈ 29247 ans
@corsiKa
explique comment soustraire des années bissextiles: 29247/365/4 20
- Donc, votre année maximum est 1601 + 29247 - 20 = 30828 .
Certaines personnes ont en fait essayé de définir cela et ont présenté la même année.