我的生产服务器正在运行java8,我的开发箱也正在运行。我运行这个,然后...
public static void main(String[] args) {
TimeZone timeZone = TimeZone.getTimeZone("America/Santiago");
Calendar st = Calendar.getInstance(timeZone);
Calendar end = Calendar.getInstance(timeZone);
st.set(2008, Calendar.JANUARY, 1, 0, 0, 0);
end.set(2028, Calendar.DECEMBER, 31, 23, 59, 59);
String actualOffset=null;
ZonedDateTime timeActual = ZonedDateTime.ofInstant(st.toInstant(), timeZone.toZoneId());
ZonedDateTime lastTime = ZonedDateTime.ofInstant(end.toInstant(), timeZone.toZoneId());
do {
if (!timeActual.getOffset().getId().equals(actualOffset)) {
actualOffset=timeActual.getOffset().getId();
System.out.println("Offset changed. " + timeActual.get(ChronoField.DAY_OF_MONTH) + "/" + timeActual.get(ChronoField.MONTH_OF_YEAR) + "/" + timeActual.get(ChronoField.YEAR) + ". New value " + actualOffset);
}
timeActual = timeActual.plusDays(1);
} while (timeActual.isBefore(lastTime));
}
我进入开发阶段:
Offset changed. 1/1/2008. New value -03:00 Offset changed. 30/3/2008. New value -04:00 Offset changed. 12/10/2008. New value -03:00 ...
但是如果我在生产中运行,我只会得到一条生产线:
Offset changed. 1/1/2008. New value -03:00
会发生什么?我的生产服务器在docker下,可能是这样吗?
答案 0 :(得分:2)
这可能是因为(至少)您的一个安装的智利时区数据已过时。
从Wikipedia可以看到,近年来政客已经多次更改了规则,这可以解释为某些装置可能具有过时的时区数据。当政客改变主意时,不会自动更新Java安装。
解决方案是使用“时区更新程序”工具来更新Java安装的时区数据库。升级到最新的Java版本可能是另一种选择,您可以根据需要尝试。
链接