![OpenJDK 时区问题:sun.util.calendar.ZoneInfoFile.getZoneIDs](https://linux22.com/image/1333898/OpenJDK%20%E6%97%B6%E5%8C%BA%E9%97%AE%E9%A2%98%EF%BC%9Asun.util.calendar.ZoneInfoFile.getZoneIDs.png)
我使用的是 Ubuntu 12.04 LTS,最近使用 apt-get 安装了 openjdk-7-jdk。一段时间内一切似乎都很好,但我意识到我的一个项目开始出现以下问题:
java.lang.NullPointerException
sun.util.calendar.ZoneInfoFile.getZoneIDs(ZoneInfoFile.java:790)
sun.util.calendar.ZoneInfo.getAvailableIDs(ZoneInfo.java:601)
java.util.TimeZone.getAvailableIDs(TimeZone.java:580)
mpeg.psi.TOT.parseMJD(TOT.java:136)
在 Google 上搜索后,我发现其他人也遇到了类似的问题,并指出 Oracle 的 tzupdater.jar 工具存在错误。我的情况应该不是这样,但我尝试了建议的修复方法,检查并修改了“lrwxrwxrwx 1 root root 27 Set 20 08:59 /usr/lib/jvm/java-7-openjdk-amd64/jre/lib/zi -> ../../../../../share/javazi”的权限,然后运行 tzupdater。我以某种方式修复了它,但后来的更新又把它搞坏了。
我决定采取激进的措施:
$> sudo apt-get purge openjdk-6-jre openjdk-6-jre-lib openjdk-7-jre-headless openjdk-7-jre-lib openjdk-7-jre openjdk-6-jre-headless java-common
$> sudo apt-get install openjdk-6-jdk ant jdownloader java-common
$> sudo apt-get install tzdata-java
tzdata-java is already the newest version.
仍有问题 :(
现在我没主意了。破坏这一点的代码是:TimeZone.getAvailableIDs(-3 * 60 * 60 * 1000);也就是说,我想让 GMT-3 将一组数字(小时、分钟、天……)转换为日期:
gc.set(GregorianCalendar.YEAR, year);
gc.set(GregorianCalendar.MONTH, month - 1);
关于如何修复 Java TZ 或如何绕过 Java 代码问题,有什么建议吗?