为 Java 个时区生成自定义 tzdb.dat

Generate a custom tzdb.dat for Java time zones

使用 Java 1.6 我从 .zic 文件生成了一个 jre/lib/zi/America/Sao_Paulo 时区文件,其内容如下:

Rule Brazil 2012 only - Feb 26 06:00 0 S
Rule Brazil 2012 only - Oct 21 00:00 1 D
Rule Brazil 2013 only - Feb 17 06:00 0 S
Rule Brazil 2013 only - Oct 20 00:00 1 D
Rule Brazil 2014 only - Feb 16 06:00 0 S
Rule Brazil 2014 only - Oct 19 00:00 1 D
Rule Brazil 2015 only - Feb 22 06:00 0 S
Rule Brazil 2015 only - Oct 18 00:00 1 D
Rule Brazil 2016 only - Feb 21 06:00 0 S
Rule Brazil 2016 only - Oct 16 00:00 1 D
Rule Brazil 2017 only - Feb 19 06:00 0 S
Rule Brazil 2017 only - Oct 15 00:00 1 D
Zone Brazil/East -3:00 Brazil BR%sT

现在,在 Java 8 中,jre/lib/zi 文件夹不再存在。它被 jre/lib/tzdb.dat 文件取代。

如何使用我的自定义时区生成此 tzdb.dat 文件?

您或许可以试试这个反向移植-class:

TzdbZoneRulesCompiler

但请注意:它 不是 public(您可以通过复制粘贴或类似方式绕过它)因此并非真正用于 public用法。此外,它不是 oracle 使用的原始 tz 编译器,但可能会创建相同的输出(假设此细节在 java.time 的 backport 中保持相同)。

我同意 Matt Johnson 的意见,即尽可能避免使用自定义时区,而是调整应用程序代码。您还可以考虑通过定义专门的 zone rules(通过官方 Java-8-API)来创建自定义时区。

我找到了解决方案。

瞧!