2009-09-09 90 views
4

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

在这两个事件并正确记录日期之后,我们的软件保持运行至关重要。操作系统系统时间正确无关紧要。鉴于我们正在使用Java,我们应该能够处理相对于1900年的主要时期的日期。然而,如果系统时间在1970年的UNIX时代之前设置,java JVM甚至不会运行!它只是崩溃。

为了增加燃料消耗,NTP服务器由另一个供应商提供,我们无法控制它。所以使用其他协议或修改服务器来处理这些是不可能的。

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

  1. 从日期修改NTPD客户端软件以某种方式与NTP服务器协同工作和偏差的本地时间大于Unix纪元1970年,而不是1900年。因此,允许对JVM在初始化时运行时不会崩溃。所有的时间戳将被处理相对于我们选择的翻转日期。 (所以基本上,确保我们翻转到比Unix纪元更大的日期)。

  2. 允许ntp更正的时间翻转到1900时期并找到修复,以便JVM不会崩溃。

有没有其他人处理过这个问题?还有,我还没有预见到可能会发生的其他问题,使这些解决方案中的一个或两个都不可行吗?

+0

如果您的软件只需要运行到2050年,为什么2360年和2380年对您来说是一个问题? – Bombe 2009-09-09 13:58:21

+0

Ooopps! Y2.036K和Y2.038K。我的错。 – S73417H 2009-09-09 14:09:44

+0

很长时间 - 你有没有找到解决方案?这是什么?非常有趣的问题。 – chx 2011-01-06 00:47:23

回答

3

在具有64位JVM的64位Linux上安装软件。 time_t和朋友在这里是64位,调整过去2038年的时间,看看东西是否仍然有效。如果你不错,抛弃NTP,找到一个可用作精确时钟的GPS或其他信号源,并确保它们没有32位问题,通过接口软件读取/同步时间。

+2

你怎么知道GPS将在40年左右时间内仍然存在! – 2010-10-03 16:37:11