使用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文件?
答案 0 :(得分:0)
您可以试试这个backport-class:
但请注意:不公开(您可以通过复制粘贴或类似方式绕过它)因此并非真正用于公共用途。此外,它不是oracle使用的原始tz编译器,但可能创建相同的输出(假设此细节在java.time的backport中保持相同)。
我同意Matt Johnson的意见,尽可能避免使用自定义时区,而是调整应用程序代码。您还可以考虑通过定义专门的zone rules(通过官方Java-8-API)来创建自定义时区。
答案 1 :(得分:0)
我找到了解决方案。
用自定义值替换行。
规则巴西2012年 - 2月26日06:00 0 S. 规则巴西2012年 - 10月21日00:00 1 D
将文件重新打包到tar.gz文件中。
使用时区更新工具(tzupdater.jar) - http://www.oracle.com/us/technologies/java/tzupdater-readme-136440.html - 创建新的tzdb.dat文件
java -jar tzupdater.jar -f -l file:///path/to/file/tzdata2015f.tar.gz
瞧!