Windows 上的官方 Python 2.5 是使用 Visual Studio.Net 2003 构建的,它使用 32 位 time_t。所以当年份 > 2038 时,它只是给出例外。

虽然这个问题在 Python 2.6 中得到了修复(在 VS2008 中将 time_t 更改为 64 位),但我想使用 2.5,因为许多模块已经为其编译了。

所以这是我的问题 - 有没有任何解决方案可以轻松地让我的程序处理 > 2038 年并且仍然使用官方 Python 2.5?例如一些预制库,例如 "time64" 或“长时间”等...

请不要告诉我升级到 2.6+ 或忘记这个错误 - 我有理由需要让它工作,这就是我在这里发布问题的原因。

有帮助吗?

解决方案 3

我发现的最好的解决方法是让Python 2.5中的源副本,并重新编译的编译器的时间模块缺省的time_t到64位,例如VS2005或VS2008(也可以配置C运行以防止侧由端问题)。

其他提示

在标准库的datetime模块应该可以正常工作适合你。你从模块需要什么timedatetime不提供?

我不想听起来很陈词滥调,但为什么不呢:

  • 忘记 Python 2.5 的 Y2038 bug
  • 在 2038 年之前的某个时间升级到 Python 2.6

编辑:澄清:(我是认真的——我不是故意开玩笑的)

想必您可以在从现在到 2038 年之间的某个不确定的时间将 Python 升级到 2.6(或更高版本)。也许是在2012年。也许是在2015年。也许是在 2037 年。

如果您意识到应用程序中 Python 时间戳变量之间的差异(我不是一个 Python 用户),那么似乎这些是需要考虑的重要方面:

  • 哪些数据被持久保存
  • 如何使用 Python 2.6 恢复已保存的 Python 2.5 时间戳变量(大概它会“做正确的事情”)
  • 旧数据是否会以其持久形式存储足够长的时间以避免出现歧义(例如当考虑 1950 年至 2049 年之间时,年份“96”是明确的,但如果该数据保留到 2230 年,则“96”可能是 1996 年、2096 年或 2196 年)

如果答案是满意的,只需使用常规时间戳及其 2038 bug。您必须将其与使您的应用程序能够使用备用时间戳(例如,数据库时间戳字符串或其他)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top