我的生产服务器正在运行 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下,可能是这样吗?
最佳答案
这可能是因为(至少)您的其中一个安装具有过时的智利时区数据。
从维基百科中我们可以看到,政治家近年来多次更改了规则,这可以解释某些装置可能具有过时的时区数据。当政治家改变主意时,Java 安装不会自动更新。
解决方案是使用时区更新工具来更新 Java 安装的时区数据库。升级到最新的 Java 版本可能是另一种选择,如果您愿意,可以尝试。
链接
关于java - DST 偏移在我的开发服务器中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52273959/