【问题标题】:DST offset dont work in my develop serverDST 偏移量在我的开发服务器中不起作用
【发布时间】:2019-02-15 20:13:19
【问题描述】:

我的生产服务器正在运行 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));
}

我参加了开发:

偏移量已更改。 2008 年 1 月 1 日。新值 -03:00 偏移量已更改。 2008 年 3 月 3 日。新值 -04:00 偏移量已更改。 2008 年 12 月 10 日。新值 -03:00 ...

但如果我在生产中运行,我只会得到一行:

偏移量已更改。 2008 年 1 月 1 日。新值 -03:00

发生了什么?我的生产服务器在docker下,可能是那个?

【问题讨论】:

  • 你检查过图片的偏移量和默认时区吗?
  • 可能是其中一个环境需要更新时区数据库? Timezone Updater Tool
  • 顺便说一句,由于您使用的是 Java 8 和 ZonedDateTime 并且因此内置了其他 java.time 类,我建议您完全避免使用过时的类 CalendarTimeZone。例如使用ZoneId.of("America/Santiago")ZonedDateTime.of(2008, 1, 1, 0, 0, 0)
  • 嗯……这更奇怪了。它工作正常,直到 2014 / 九月......从那里开始,偏移计算不再起作用。 DST 更改是否可能在某个历史记录表中?
  • FWIW 在我的 Java 1.8.0_60 上我在 2008 年和 2014 年(含)之间进行了 15 次更改。在 1.8.0_131 上,我在 2008 年和 2028 年之间进行了 41 次更改。

标签: java dst


【解决方案1】:

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

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

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

链接

【讨论】:

    猜你喜欢
    • 2018-01-11
    • 2011-12-13
    • 2016-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-30
    • 2011-08-04
    • 2012-09-24
    相关资源
    最近更新 更多