Question

La version officielle de Python 2.5 sous Windows a été créée avec Visual Studio.Net 2003, qui utilise time_t 32 bits. Alors, quand l'année est > 2038, il ne donne que des exceptions.

Bien que cela soit corrigé dans Python 2.6 (qui a changé time_t en 64 bits avec VS2008), j'aimerais utiliser la version 2.5, car de nombreux modules sont déjà compilés pour cela.

Voici donc ma question: existe-t-il une solution permettant à mon programme de gérer facilement l’année > 2038 et utilise-t-il toujours Python 2.5? Par exemple, certaines bibliothèques prédéfinies telles que "time64" ou "longtime" etc ...

S'il vous plaît, ne me dites pas de passer à la version 2.6+ ou d'oublier le bogue - j'ai des raisons de le faire fonctionner, c'est pourquoi je pose la question ici.

Était-ce utile?

La solution 3

La meilleure solution que j’ai trouvée est d’obtenir une copie source de Python 2.5 et de recompiler le module time avec des compilateurs dont le paramètre time_t est défini sur 64 bits, par exemple VS2005 ou VS2008 (vous pouvez également configurer le runtime C pour empêcher les modifications). question côte à côte).

Autres conseils

Le module datetime de la bibliothèque standard devrait fonctionner correctement pour vous. De quoi avez-vous besoin dans le module heure que datetime ne propose pas?

Je ne veux pas paraître banal, mais pourquoi pas:

  • oubliez le bogue Y2038 avec Python 2.5
  • mettre à niveau vers Python 2.6 à un moment donné avant 2038

modifier: Pour clarifier: (et je suis sérieux - je ne voulais pas me moquer)

Vous pouvez probablement mettre à niveau Python vers la version 2.6 (ou ultérieure) à une date indéterminée d'ici 2038. Peut-être en 2012. Peut-être en 2015. Peut-être en 2037.

Si vous êtes conscient des différences entre la variable d'horodatage Python dans votre application (je ne suis pas un grand utilisateur de Python), il semble que ce soient les aspects importants à prendre en compte:

  • quelles données sont sauvegardées de manière persistante
  • comment une variable d’horodatage Python 2.5 qui a été conservée est restaurée à l’aide de Python 2.6 (elle "supposera vraisemblablement faire la bonne chose")
  • si les anciennes données seront stockées sous leur forme persistante suffisamment longtemps pour que des ambiguïtés apparaissent (par exemple, l'année "96" est sans ambiguïté si elle est prise en compte entre 1950 et 2049, mais si ces données sont conservées jusqu'à l'année 2230, alors "" 96 "pourrait être 1996, 2096 ou 2196)

Si les réponses sont favorables, utilisez simplement l'horodatage normal avec son bogue 2038. Vous devrez comparer cela à la quantité de refonte / refactorisation nécessaire pour que votre application fonctionne avec un horodatage différent (par exemple, une chaîne d'horodatage de base de données ou autre).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top