首页 > 解决方案 > 巴西在 Java 上的夏令时新规则

问题描述

巴西夏令时的规则已更改,但最新的 java 版本中不存在此新规则。

在这个测试代码上,使用 RedHat 提供的最新版本 (java-1.8.0-openjdk-1.8.0.212-3) 的结果不是预期的:

    try {
        final SimpleDateFormat parser = new SimpleDateFormat( "dd/MM/yyyy" );
        final Date date = parser.parse( "05/12/2019" ); // 5th of december

        System.out.println( "Is in Daylight Saving Time in this time zone? "
            + TimeZone.getTimeZone( "America/Sao_Paulo" ).inDaylightTime( date ) );
    } catch ( ParseException exception ) {
        exception.printStackTrace();
    }

输出是:

Is in Daylight Saving Time in this time zone? true // should be false!

我已经向 Iana(互联网号码分配机构)- www.iana.org 发送了一封电子邮件,我正在等待他们回复。

有人知道吗?

谢谢

编辑:澄清问题:我想知道 TimeZone 数据库上的更新是如何工作的(何时完成以及由谁完成)。

Sinse Iana 回复了我的电子邮件并向我解释说巴西对 DST 所做的更改已取消 DST - GitHub并将在数据库的下一个版本中,我的问题得到了回答。

标签: javatimezonedstiana

解决方案


此更改已在 4 月的 tz 数据中上演(在此处讨论,在此处提交)。它将在 2019b 发布时出现。

目前还没有公布具体何时发生,但您可以订阅tz-announce邮件列表,以便在发生时得到通知。

当然,您需要等待相应的 Java 更新,或者使用 ziupdater 或 tzupdater 工具。


推荐阅读