Pourquoi une date des années 1600 est-elle possible ?
Windows ne stocke pas les horodatages de modification des fichiers comme le font les systèmes Unix . Selon le Centre de développement Windows (c'est moi qui souligne) :
Un temps de fichier est une valeur de 64 bits qui représente le nombre de 100-nanosecondes. les intervalles qui se sont écoulés depuis le 1er janvier 1601 à minuit. Temps universel coordonné (UTC). Le système enregistre les heures des fichiers lorsque les applications créent, accèdent et écrivent dans les fichiers.
Ainsi, en fixant une valeur erronée ici, vous pouvez facilement obtenir des dates datant des années 1600.
Bien sûr, une autre question importante est : comment cette valeur a-t-elle été fixée ? Quelle est la date réelle ? Je pense que vous ne pourrez jamais le découvrir, car il pourrait s'agir d'une simple erreur de calcul dans le pilote du système de fichiers. Une autre réponse émet l'hypothèse que la date est en fait un timestamp Unix interprété comme un timestamp Windows, mais qu'ils sont en fait calculés sur des intervalles différents (secondes contre nanosecondes).
Quel est le lien avec le 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 affecté par l'erreur d'encodage de l'utilisateur. Année 2038 Problème que les systèmes Unix traditionnels, car Unix utilisait initialement un entier de 32 bits, qui déborde plus tôt que l'entier de 64 bits de Windows. (Ceci malgré le fait qu'Unix fonctionne en secondes et que Windows fonctionne en micro/nanosecondes).
Windows est toujours affecté lors de l'utilisation de programmes 32 bits qui ont été compilés avec d'anciennes versions de Visual Studio, bien sûr.
Systèmes d'exploitation Unix plus récents se sont déjà étendus le type de données à 64 bits, évitant ainsi le problème. (En fait, comme les timestamps Unix fonctionnent en secondes, la nouvelle date enveloppante sera dans 292 milliards d'années).
Quelle est la date maximale qui peut être fixée ?
Pour les curieux, voici comment le calculer :
- El nombre de valeurs possibles dans un entier de 64 bits son 2 63 - 1 = 9223372036854775807 .
- Chaque tique représente 100 nanosecondes, soit 0,1 µs ou 0,0000001 s.
- L'intervalle de temps maximum serait 9223372036854775807 0.0000001 s donc des centaines de milliards de secondes.
- Une heure compte 3600 secondes, un jour 86400 secondes, et une année 365 jours. 86400 365 s = 31536000 s en un an. Il ne s'agit, bien entendu, que d'une moyenne, qui ne tient pas compte des années bissextiles, des secondes bissextiles ou de 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 on peut soustraire les années bissextiles : 29247 / 365 / 4 20
- Votre année maximale est donc 1601 + 29247 - 20 = 30828 .
Certaines personnes ont J'ai essayé de régler ce et on est arrivé à la même année.