如何在官方Windows Python 2.5中使用2038年后的时间
官方的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 个回答
我不是想说得太老套,但为什么不考虑以下几点呢:
- 先不去担心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问题的普通时间戳。你需要将这个和为了让你的应用程序与其他时间戳(比如数据库时间戳字符串等)兼容而需要进行的重新设计或重构进行比较。
标准库里的 datetime
模块应该能满足你的需求。你需要 time
模块里的什么功能,是 datetime
没有的呢?
我找到的最佳解决办法是获取Python 2.5的源代码,然后用一些默认将时间类型设置为64位的编译器重新编译时间模块,比如VS2005或VS2008(你也可以配置C运行时,避免出现并排安装的问题)。