如何在官方Windows Python 2.5中使用2038年后的时间

6 投票
3 回答
3438 浏览
提问于 2025-04-15 11:27

官方的Python 2.5在Windows上是用Visual Studio.Net 2003构建的,这个版本使用的是32位的时间格式。这样一来,当年份超过2038年时,它就会出现错误。

虽然在Python 2.6中这个问题已经解决了(因为它把时间格式改成了64位,并且使用了VS2008),但我还是想用2.5版本,因为很多模块已经为这个版本编译好了。

所以我想问,有没有什么简单的方法可以让我的程序在使用官方Python 2.5的情况下处理2038年以后的年份?比如一些现成的库,比如"time64"或者"longtime"之类的……

请不要告诉我升级到2.6以上版本或者忽略这个问题——我有我的理由需要让它正常工作,所以我才在这里提问。

3 个回答

7

我不是想说得太老套,但为什么不考虑以下几点呢:

  • 先不去担心Python 2.5的Y2038问题
  • 在2038年之前的某个时候升级到Python 2.6

补充说明:为了更清楚地表达我的意思:(我说真的——我不是在开玩笑)

可以推测,你可以在现在到2038年之间的某个不确定的时间点,把Python升级到2.6(或更高版本)。可能是在2012年,也可能是在2015年,甚至可能是在2037年。

如果你了解你应用中Python时间戳变量的不同之处(我对Python不太熟悉),那么以下几点似乎是需要考虑的重要方面:

  • 保存了哪些数据是持久的
  • 一个在Python 2.5中保存的时间戳变量,如何在使用Python 2.6时被恢复(可以推测它会“正确处理”)
  • 旧数据是否会以持久的形式保存足够长的时间,以至于可能出现歧义(例如,“96”这个年份在1950到2049年之间是明确的,但如果这个数据一直保存到2230年,那么“96”可能是1996年、2096年或2196年)

如果这些问题的答案是积极的,那就可以继续使用带有2038问题的普通时间戳。你需要将这个和为了让你的应用程序与其他时间戳(比如数据库时间戳字符串等)兼容而需要进行的重新设计或重构进行比较。

7

标准库里的 datetime 模块应该能满足你的需求。你需要 time 模块里的什么功能,是 datetime 没有的呢?

5

我找到的最佳解决办法是获取Python 2.5的源代码,然后用一些默认将时间类型设置为64位的编译器重新编译时间模块,比如VS2005或VS2008(你也可以配置C运行时,避免出现并排安装的问题)。

撰写回答