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

问题描述 投票:2回答:1

我的生产服务器正在运行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 dst
1个回答
2
投票

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

从维基百科我们可以看到政治家近年来已经多次改变规则,这可以解释一些安装可能会有过时的时区数据。当政治家改变主意时,Java安装不会自动更新。

解决方案是使用Timezone Updater Tool更新Java安装的时区数据库。升级到最新的Java版本可能是另一种选择,如果您愿意,可以尝试。

链接

© www.soinside.com 2019 - 2024. All rights reserved.