利用JDK8时区常量进行时区相关操作
在进行Java
编程时有时候会涉及到时区相关的操作,本文简要介绍一种通过使用JDK
内置的时区常量来进行时区相关操作。
ZoneId使用
在涉及到时区的操作时,通常采用类似如下的代码以硬编码方式实现相关功能。
|
|
上述代码中涉及到的时区名称虽然可通过网络查询获得,但使用起来不是特别方便,有木有可能通过JDK
内置的API实现呢?
通过查阅网络资料以及JDK
的官方文档,最终找到了答案,那就是ZoneId
! 在其官方文档中有如下说明
基于上述说明在ZoneId
的源码中,可找到如下代码段,该代码段中内置了一些常用时区表示,通过它们可以用更简洁的方式实现。
|
|
基于上述代码段改进后的使用方式如下,可以看出相对于初始实现稍微简洁那么一丢丢~
|
|
ZoneId分析
由于前述ZoneId.SHORT_IDS
中的时区都是通过字符串表示的,在上网查询的情况下可通过如下代码获取各个时区与UTC偏移量的对应关系
|
|
执行结果如下
|
|
上述输出结果是无序的,不便于对比使用,可将代码改进如下以便其能按顺序输出
|
|
改进后的输出结果如下,除了个别时区之外基本上都覆盖到了。
|
|
SHORT_IDS
中内置的时区总共有28条,但从上述输出结果来看,仍有个别时区遗漏在其中,在ZoneId
的API文档中说明SHORT_IDS
是来源于TZDB 2005r
,不过我没有在网上找到这方面的详细资料。对于不在SHORT_IDS
中的,可从List of tz database time zones中获取响应的时区然后通过硬编码方式实现。