java.time.zone.ZoneRulesException: Unknown time-zone ID: Europe/Kyiv

java.time.zone.ZoneRulesException: Unknown time-zone ID: Europe/Kyiv
	at java.time.zone.ZoneRulesProvider.getProvider(ZoneRulesProvider.java:272)
	at java.time.zone.ZoneRulesProvider.getRules(ZoneRulesProvider.java:227)
	at java.time.ZoneRegion.ofId(ZoneRegion.java:120)
	at java.time.ZoneId.of(ZoneId.java:411)
	at java.time.ZoneId.of(ZoneId.java:359)

异常代码,原因是找不到Europe/Kyiv这个时区,原来我以为是linux系统中没有这个时区,然后添加这个时区后,发现问题还在。最后在看java.time.zone.ZoneRulesProvider类找发现了一行,String prop = System.getProperty("java.time.zone.DefaultZoneRulesProvider");时区是读这个环境变量的,在网上找一找后发现了可以改这个环境变量,或者还可以修改jre/lib/tzdb.dat这个时区数据库,用这tzdb.dat这个一搜索,发现oracle有一个Timezone Updater Tool叫TZUpdater.jar,运行一下就更新了,需要指定IANA时区数据库

接下来就是下载TZUpdater.jar,oracle下载地址太难找了,收藏一下先。

好了,看一下怎么用吧,

TZUpdater 工具用法
TZUpdater 工具用于执行该工具的 JDK/JRE 软件实例。每次执行都会修改 JDK/JRE 软件。要将工具管理到 JDK/JRE 软件的多个实例。

在安装的 JDK/JRE 软件上运行 TZUpdater 工具之前,您必须停止操作系统上的 JDK/JRE 软件的任何正在运行的服务。

使用以下命令运行 TZUpdater 工具:

java -jar tzupdater.jar options
1
要成功更新时区数据,您应该确保您有足够的权限来修改JDK_HOME /jre/lib或JRE_HOME /lib目录。

如果未指定任何选项,则会显示用法消息。要更新时区数据,请使用-l或-f选项。

选项    描述
-h, --help
将用法打印到stdout并退出。如果指定此选项,则其他选项将被忽略。
-V, --version    打印工具版本、JRE 中的 tzdata 版本以及工具将更新到的 tzdata 版本,然后退出。
-l, --location url-link-to-archive-file    从提供的tzdata.tar.gz包中编译、测试和更新 JRE 时区数据,例如-l https://www.iana.org/time-zones/repository/tzdata-latest.tar.gz. 支持的 URL 协议:http://、https://、file://。如果未提供 URL 链接,该工具将使用位于 的最新 IANA tzdata 包https://www.iana.org/time-zones/repository/tzdata-latest.tar.gz。
-f, --force    强制 tzdata 更新。如果更新到较旧的 tzdata 版本,请使用此选项。
-v, --verbose    向 显示详细消息stdout。

好吧,其实就一句话: 

java -jar tzupdater.jar -l https://www.iana.org/time-zones/repository/tzdata-latest.tar.gz

这样就已经搞定了,

下面再介绍一下,怎么更新linux的时区数据库吧,linux里面也没有Europe/Kyiv。

linux系统中没有这个时区,可以通过命令:timedatectl list-timezones | grep -i europe,查看欧洲的时区。

现在就是要添加这个区:

添加新的时区,可以从IANA时区数据库中下载最新的时区信息。最新的时区数据库可以在IANA官方网站上找到。您可以在该网站上找到一个名为tzdata的.tar.gz文件,该文件包含了最新的时区数据。您可以将该文件下载到您的Linux系统上,放到/usr/share/zoneinfo/文件夹中,然后使用以下命令将其解压缩:

tar -xvf tzdata.tar.gz

最后使用timedatectl list-timezones | grep -i europe再次查看,已经有了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值