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

标签 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下,可能是这样吗?

最佳答案

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

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

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

链接

关于java - DST 偏移在我的开发服务器中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52273959/

相关文章:

java - 在 Android 上将 UTC 转换为 EST 不适用于夏令时

mysql - 检测日期是否在 MySql 中的夏令时

java - 单击 html 表行的编辑链接以填充 EditDATA_form 字段。表数据由 servlet 对 jsp 的响应填充

java - 在本地主机上测试 Google App Engine Java 后端

java - 使用jsp从数据库检索数据(Hibernate + Spring + Maven)

java - 将文本文件逐字符读入Java中的二维数组

java - 在多个环境之间管理配置文件的方法

java - 将 UTC 时间戳插入 MySQL - 夏令时时区

javascript - 1974 年 Javascript 中的夏令时?

c++ - Windows UTC 时间与夏令时无关吗?