我目前正在开展一个项目,要求我们的软件必须至少运行到 2050 年。最近我们遇到了处理 NTP 协议中的 Y2.036K“错误”以及 Y2.038K 错误的问题。基本上,我们的软件必须在这些日期之后继续运行,所有数据都使用正确的时间戳记录。鉴于目前还没有解决这些错误的方法,因此必须采用变通方法。
至关重要的是,我们的软件在这两个事件之后继续运行并正确记录日期。操作系统系统时间是否正确并不重要。鉴于我们使用的是 Java,我们应该能够处理相对于 1900 年黄金时代的日期。但是,如果系统时间设置在 1970 年的 Unix 纪元之前,java JVM 甚至都不会运行!它只是崩溃。
火上浇油,NTP 服务器由另一家供应商提供,我们无法控制它。因此,使用其他协议或修改服务器来处理这些都是不可能的。
需要创造性的解决方案。不用说,必须发生一些深奥的巫术。我们考虑了以下几点:
修改 ntpd 客户端软件以某种方式与 ntp 服务器协作,并从大于 1970 年而非 1900 年的 Unix 纪元的日期偏移本地时间。从而允许 JVM 运行而不会在初始化时崩溃。然后将相对于我们选择的翻转日期处理所有时间戳。(所以基本上,确保我们翻转到一个比 Unix 纪元大的日期)。
让 ntp 更正时间翻转到 1900 纪元并找到修复程序,以便 JVM 不会崩溃。
有没有其他人解决过这个问题?另外,是否还有其他我没有预见到的问题,使这些解决方案中的一个或两个根本不可行?