4

我目前正在开展一个项目,要求我们的软件必须至少运行到 2050 年。最近我们遇到了处理 NTP 协议中的 Y2.036K“错误”以及 Y2.038K 错误的问题。基本上,我们的软件必须在这些日期之后继续运行,所有数据都使用正确的时间戳记录。鉴于目前还没有解决这些错误的方法,因此必须采用变通方法。

至关重要的是,我们的软件在这两个事件之后继续运行并正确记录日期。操作系统系统时间是否正确并不重要。鉴于我们使用的是 Java,我们应该能够处理相对于 1900 年黄金时代的日期。但是,如果系统时间设置在 1970 年的 Unix 纪元之前,java JVM 甚至都不会运行!它只是崩溃。

火上浇油,NTP 服务器由另一家供应商提供,我们无法控制它。因此,使用其他协议或修改服务器来处理这些都是不可能的。

需要创造性的解决方案。不用说,必须发生一些深奥的巫术。我们考虑了以下几点:

  1. 修改 ntpd 客户端软件以某种方式与 ntp 服务器协作,并从大于 1970 年而非 1900 年的 Unix 纪元的日期偏移本地时间。从而允许 JVM 运行而不会在初始化时崩溃。然后将相对于我们选择的翻转日期处理所有时间戳。(所以基本上,确保我们翻转到一个比 Unix 纪元大的日期)。

  2. 让 ntp 更正时间翻转到 1900 纪元并找到修复程序,以便 JVM 不会崩溃。

有没有其他人解决过这个问题?另外,是否还有其他我没有预见到的问题,使这些解决方案中的一个或两个根本不可行?

4

1 回答 1

3

在带有 64 位 JVM 的 64 位 Linux 上安装您的软件。time_t和朋友这里是 64 位的,调整过去 2038 的时间,看看东西是否仍然有效。如果你很好,扔掉 NTP,找到一个 gps 或其他可以用作精确时钟并保证它们没有 32 位问题的源,连接你的软件以从中读取/同步时间。

于 2009-09-09T17:36:13.973 回答