DST偏移量在我的开发服务器中不起作用

时间:2018-09-11 10:33:11

标签: java dst

我的生产服务器正在运行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下,可能是这样吗?

1 个答案:

答案 0 :(得分:2)

这可能是因为(至少)您的一个安装的智利时区数据已过时。

从Wikipedia可以看到,近年来政客已经多次更改了规则,这可以解释为某些装置可能具有过时的时区数据。当政客改变主意时,不会自动更新Java安装。

解决方案是使用“时区更新程序”工具来更新Java安装的时区数据库。升级到最新的Java版本可能是另一种选择,您可以根据需要尝试。

链接