我们有一个简单的实用程序应用程序,它可以读取JRE中使用的所有时区数据,并将其全部显示在一个简单的表中.我们需要使用较旧版本的JRE(6_24)来发布即将发布的产品(由于显然存在其他问题),但我们还需要在该版本中包含更新的时区更新(否则将包含在6_29中) ).我们已经打包了一个将要安装的私有JRE,因此使用TZUpdater工具将时区更新到该私有JRE 不是问题 - 问题是读取/验证tzdata的哪个版本(例如tzdata2010o,tzdata2011k)是正在使用实用程序应用程序读取(即正在运行应用程序的JRE中使用的是哪个版本).该应用程序当前在标题栏中显示JRE版本,但随着时区更新,这已不再足以确定正在使用的时区数据版本.
我查看了TimeZone类,但它似乎没有提供这些信息 - 也许有一个系统属性可以保存这些信息?TZUpdater工具知道正在使用哪个版本,所以它必须在某个地方可用 - 我无法想象他们会在分析中确定更新工具中正在使用哪个版本...有谁知道在哪里找到这个信息?
在我的一个JRE中,有一个JRE_PATH\lib\zi
名为的文件ZoneInfoMappings
.在第一行显示您要查找的数据.
我将寻找一种不那么强硬的方式,如果我找到了什么就会更新答案.
更新:似乎没有API来获取此数据.但是,该类sun.util.calendar.ZoneInfoFile
中的代码显示了如何解析它.
在Java 8中,您可以使用ZoneRulesProvider.getVersions("UTC")
:
版本的确切含义和格式是特定于提供程序的。版本必须遵循字典顺序,因此返回的映射将按照从最早的已知规则到最新的可用规则的顺序排列。默认的“ TZDB”组使用由年份和字母组成的版本编号,例如“ 2009e”或“ 2012f”。
例:
System.out.println(java.time.zone.ZoneRulesProvider.getVersions("UTC").lastEntry().getKey());
Run Code Online (Sandbox Code Playgroud)
在我的Oracle Java 8u91中,我得到:
2016a
归档时间: |
|
查看次数: |
9125 次 |
最近记录: |