代码之家  ›  专栏  ›  技术社区  ›  Valdo Raya

Java日光节约似乎是错误的

  •  1
  • Valdo Raya  · 技术社区  · 6 年前

    自从昨天(21/10/2018)以来,我一直在用Java解决时区问题。看来,JAVA正在考虑在巴西进行日光节约,但现在还没有。

    我创建了以下测试以确保

    public static void main(String[] args) {
    
        ZonedDateTime dateTime = LocalDateTime.now().atZone(ZoneId.systemDefault());
        System.out.println(dateTime);
    
        ZonedDateTime saoPaulo = dateTime.withZoneSameInstant(ZoneId.of("America/Sao_Paulo"));
        ZonedDateTime cuiba = dateTime.withZoneSameInstant(ZoneId.of("America/Cuiaba"));
        ZonedDateTime rightTime = dateTime.withZoneSameInstant(ZoneId.of("GMT-4"));
        System.out.println(saoPaulo);
        System.out.println(cuiba);
        System.out.println(rightTime);
    }
    

    它给出了以下输出

        2018-10-22T09:55:34.473-02:00[America/Sao_Paulo]
        2018-10-22T09:55:34.473-02:00[America/Sao_Paulo]
        2018-10-22T08:55:34.473-03:00[America/Cuiaba]
        2018-10-22T07:55:34.473-04:00[GMT-04:00]
    

    这是错误的,因为现在到圣保罗的时区应该是-03,美洲/库亚巴应该是-04

    谁知道Java的时区信息的来源是什么?我能帮上忙吗?我知道我可以通过设置一个固定的GMT偏移量来修复它,但我不喜欢它。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Valdo Raya    6 年前

    jon skeet发布的链接帮助我解决了问题。甲骨文已经更新了最新版本的日光节约信息。在更新了jdk版本之后,它按预期工作。

        2018-10-22T09:19:31.761-03:00[America/Sao_Paulo]
        2018-10-22T09:19:31.761-03:00[America/Sao_Paulo]
        2018-10-22T08:19:31.761-04:00[America/Cuiaba]
        2018-10-22T08:19:31.761-04:00[GMT-04:00]