77 votes

Comment un dossier peut-il avoir été "créé" en 1641 ?

Il y a quelques années, je suis tombé sur ce fichier sur notre serveur de fichiers.

Screenshot of a file properties dialog in Microsoft Windows

Et je me demande comment un fichier peut dire qu'il a été créé en 1641 ? Pour autant que je sache, le temps sur le PC est défini par le nombre de secondes depuis le 1er janvier 1970. Si l'index tombe en panne, vous pouvez obtenir le 31 décembre 1969 (l'index indique probablement -1), mais je reste perplexe devant cette date apparemment aléatoire, qui précède même la fondation des États-Unis d'Amérique.

Alors comment un dossier peut-il être daté de 1641 ?

PS : Les dates sont en français. Février est le mois de février.

109voto

slhck Points 209720

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.

17voto

Luaan Points 753

Si vous ne vous sentez pas trop mal d'avoir deviné, laissez-moi vous donner une explication. Et je ne veux pas dire "quelqu'un a mis une valeur absurde", c'est évidemment toujours possible :)

Le temps Unix utilise généralement le nombre de secondes depuis 1970. Windows, en revanche, utilise 1601 comme année de départ. Donc si nous supposons (et c'est une grosse supposition !) que le problème est une mauvaise conversion entre les deux temps, nous pouvons imaginer que la date qui était censée être représentée est en réalité à un moment donné en 2011 (1970 + 41), qui a été incorrectement converti en 1640 (1601 + 41) . EDIT : En fait, j'ai fait une erreur dans l'année de départ de Windows. Il est possible que l'heure de création réelle soit en 2010, ou qu'il y ait eu une autre erreur (les erreurs de type "off-by-one" sont assez courantes dans les logiciels :D).

Étant donné que cette année se trouve être une autre des dates de suivi associées au dossier en question, je pense que c'est une explication assez plausible :)

5voto

Drew Points 101

Comme d'autres l'ont écrit, l'époque de Windows est à 1601-01-01 00:00 .

Le nombre de secondes entre cette époque et l'heure du fichier affiché, est 1 266 705 294 .
Si nous ajoutons cela à l'époque d'Unix, nous arrivons à 2010-02-20 23:34:54 CEST un samedi. C'est environ un an avant la date du dernier accès, ce qui le rend quelque peu plausible. Il se peut donc que ce soit un timestamp Unix interprété par rapport à une mauvaise époque.

3voto

ErikF Points 259

Comme d'habitude pour ce genre de questions, le blog de Raymond Chen a une réponse à ce sujet de l'entrée "Pourquoi l'époque de Win32 est le 1er janvier 1601 ?" du 6 mars 2009 :

El FILETIME enregistre le temps sous la forme de 100 nanosecondes. depuis le 1er janvier 1601. Pourquoi cette date a-t-elle été choisie ?

Le calendrier grégorien fonctionne sur un cycle de 400 ans, et 1601 est le première année du cycle qui était actif au moment de la conception de Windows NT. était conçu. En d'autres termes, elle a été choisie pour que les mathématiques soient bien.

J'ai en fait l'email de Dave Cutler qui le confirme.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X