我目前正在做一个项目,要求我们的软件必须至少在2050年前运行。最近,我们在处理NTP协议中的Y2.036K“bug”和Y2.038K bug时遇到了问题。基本上,我们的软件必须在这些日期之后继续运行,并使用正确的时间戳记录所有数据。考虑到目前还没有解决这两个bug的方法,必须采用解决方法。
我们的软件在这两个事件之后保持运行并正确记录日期是至关重要的。操作系统时间是否正确并不重要。考虑到我们使用Java,我们应该能够在滚动结束后处理相对于1900的黄金时期的日期。但是,如果JavaJVM在1970之前在UNIX EPOCH中设置,那么系统甚至不会运行!它只是崩溃了。
为了向火灾中添加燃料,NTP服务器由另一个供应商提供,我们无法控制它。因此,使用另一个协议或修改服务器来处理其中的任何一个都是不可能的。
需要创造性的解决方案。不用说,一定会发生一些深层的巫术。我们考虑了以下事项:
-
修改ntpd客户机软件,以某种方式与ntp服务器合作,并将本地时间从1970年而不是1900年的unix epoch日期偏移。因此,允许JVM在初始化时不崩溃地运行。所有的时间戳将处理相对于我们选择的滚动日期。(因此,基本上,请确保滚动到一个比Unix时代更大的日期)。
-
允许NTP修正时间滚动到1900 epoch,并找到一个修正,以便JVM不会崩溃。
还有人处理过这个问题吗?还有,是否还有其他我没有预见到的问题,使得这些解决方案中的一个或两个根本不可行?