我目前工作上的一个项目的一项要求,我们的软件必须工作至少到2050年。最近,我们已经遇到的问题处理Y2。036K"错误"在NTP协议,也Y2。038K的错误。基本上,我们的软件,必须继续运行过去的这些日期的所有数据记录的使用正确的时间戳。鉴于目前没有解决这些错误的解决方法必须被采用。

至关重要的是,我们的软件保持运行之后,这两个事件及记录的日期正确。这不是关键的操作系统系统的时间是正确的。鉴于我们使用我们应该能够处理日期相对于总理时代的1900年后它滑过。然而,java JVM甚至不会运行系统的时间设定之前Unix epoch在1970年!它只是崩溃。

添加燃料火,NTP服务器提供的另一个供应商和我们无法控制它。因此,使用另一种议定书或修改的服务器,以处理任何这是不可能的。

一个创造性的解决方案是必需的。不用说,一些深层次的巫术必须采取的地方。我们认为如下:

  1. 修改ntpd客户机软件以某种方式合作与ntp服务器和抵消当地时间从一日期大于Unix epoch在1970年而不是1900年。因此,允许JVM运行没有崩溃,在初始化。所有时间戳然后将处理相对于我们所选择的翻新。(所以基本上,确保我们翻转一日期大于Unix epoch)。

  2. 允许ntp修正的时间来翻到1900时代,并找到解决,以便JVM不会崩溃。

还有别人来解决这个问题?而且,是否有任何其他可能出现的问题,我没有预见,使得一个或两者这些解决方案不可行呢?

有帮助吗?

解决方案

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

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