Java 巴西夏令时新规定

New rules for Brazil's Daylight Saving Time on 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 数据库的更新是如何工作的(何时完成以及由谁完成)。

Iana 回复了我的电子邮件并向我解释说巴西 DST 的更改是在 Brazil has canceled DST - GitHub 上进行的,它将在数据库的下一个版本中进行,我的问题得到了回答。

此更改在 4 月份 (thread here, commit here) 的 tz 数据中上演。它将在 2019b 发布时出现。

目前还没有确切的公告,但您可以订阅 tz-announce 邮件列表,以便在它发生时得到通知。

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