5

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+ 或忘记这个错误 - 我有理由需要让它工作,这就是我在这里发布问题的原因。

4

3 回答 3

7

标准库中的datetime模块应该适合您。您需要从不提供的模块time中获得datetime什么?

于 2009-05-08T13:34:27.450 回答
7

我并不是说听起来老套,但为什么不:

  • 忘记 Python 2.5 的 Y2038 错误
  • 在 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 错误的常规时间戳。您必须将其与您必须做的重新设计/重构的数量进行比较,以使您的应用程序使用备用时间戳(例如数据库时间戳字符串或其他)。

于 2009-05-08T13:35:51.223 回答
4

我发现的最佳解决方案是获取 Python 2.5 的源代码副本,并使用默认 time_t 为 64 位的编译器重新编译 time 模块,例如 VS2005 或 VS2008(也可以配置 C 运行时以防止并行- 侧面问题)。

于 2009-12-08T09:17:53.970 回答