2009-12-24 7 views
4

Obtenir deux temps de modification différente lorsqu'elle est calculée à partir de différentes versions de Python sous Windows XP.python2.4 et 2.6 se comporte différemment pour os.path.getmtime() sous Windows

python2.4

C:\Copy of elisp>c:\python24\python 
Python 2.4.4 (#71, Oct 18 2006, 08:34:43) [MSC v.1310 32 bit (Intel)] on win32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import os 
>>> os.path.getmtime("auto-complete-emacs-lisp.el") 
1251684178 
>>> ^Z 

python2.6

C:\Copy of elisp>C:\Python26\python 
Python 2.6.4 (r264:75708, Oct 26 2009, 08:23:19) [MSC v.1500 32 bit (Intel)] on win32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import os 
>>> os.path.getmtime("auto-complete-emacs-lisp.el") 
1251687778.0 
>>> 

Il y a une différence de 3600 secondes rapportées par python2.6 et python2.4.

Quelle est la raison de ce comportement étrange?

+0

Lequel est réellement correct? Je devine 2.6? – DNS

+0

python2.6 est correct –

Répondre

2

C'est un bogue dans l'implémentation de Microsoft de la bibliothèque standard C. Python 2.4 utilisé pour utiliser l'appel stdlib fstat pour obtenir des informations sur les fichiers, et pourrait donc se terminer une heure dans les paramètres régionaux qui utilisent DST.

Dans Python 2.5 et versions ultérieures, os.stat appelle l'API Win32-only directement pour obtenir des informations de fichier lors de l'exécution sur Windows, ce qui entraîne la sortie correcte. Voir this thread pour plus.

+0

En outre, ce message: http://coding.derkeiler.com/Archive/Python/comp .lang.python/2007-06/msg00300.html – atzz

2

Il y a une différence de 3600 secondes ...

Cela devrait être le kicker. C'est un problème de fuseau horaire, pur et simple.

Maintenant, tout ce que vous avez à faire est de savoir pourquoi 2.4 et 2.6 utilisent différentes informations de fuseau horaire :-)

+1

Le « Quoi de neuf en Python 2.x » pages ne mentionnent pas de changements dans le comportement ou soit fuseau horaire mtime(), donc je vais le deviner Microsoft à ses vieux trucs, entre MSC v .1310 et v.1500. Une version personnalisée de chacun avec la même version, si c'est possible, serait une façon de voir si c'est le cas. –

+0

Assez étrangement, theres quelques messages sur le net se plaindre à ce sujet: http://www.velocityreviews.com/forums/t351183-os-path-getmtime-on-winxp.html par exemple. – paxdiablo

+0

Et http://coding.derkeiler.com/Archive/Python/comp.lang.python/2007-06/msg00000.html – paxdiablo

Questions connexes