高级JAVA开发必备技能:时区的规则发生变化时,如何同步JDK的时区规则(实战方案,建议收藏)
技术活,该赏
点赞,收藏再看,养成习惯
场景
服务器安装JDK时,默认会有支持JDK版本对应的时区规则。但是时区规则可能会变化的,那如何保持时区规则是最新的呢?
TZUpdater 工具介绍
提供的 TZUpdater 工具 允许您使用更新的时区数据更新已安装的 Java 开发工具包 (JDK) 和 Java 运行时环境 (JRE) 软件,以适应不同国家/地区的夏令时 (DST) 更改。Oracle 依赖于通过 IANA 的时区数据库公开提供的时区数据。
如果您无法使用 Oracle 最新的 JDK 或 JRE 更新版本,或者如果最新版本上的时区数据不是最新可用的,TZUpdater 工具提供了一种更新时区数据的方法,同时保持其他系统配置和依赖项不变.
TZUpdater 工具用法
TZUpdater 工具用于执行该工具的 JDK/JRE 软件实例。每次执行都会修改 JDK/JRE 软件。要将工具管理到 JDK/JRE 软件的多个实例。
在安装的 JDK/JRE 软件上运行 TZUpdater 工具之前,您必须停止操作系统上的 JDK/JRE 软件的任何正在运行的服务。
使用以下命令运行 TZUpdater 工具:
java -jar tzupdater.jar options
要成功更新时区数据,您应该确保您有足够的权限来修改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 。
|
手动升级
注意:
1、在安装的 JDK/JRE 软件上运行 TZUpdater 工具之前,您必须停止操作系统上的 JDK/JRE 软件的任何正在运行的服务。
2、要成功更新时区数据,您应该确保您有足够的权限来修改JDK_HOME
/jre/lib
或JRE_HOME
/lib
目录。(linux系统:JRE目录要有写权限;windows系统:用管理员身份运行cmd)
3、如果系统上有多个JDK/JRE ,需要将该工具用于每个JDK/JRE中(每个JDK/JRE都要操作一遍)
4、更新成功后,要重新启动此 JDK/JRE 实例上的应用程序服务(如果还没更新,重启下服务器试试)
操作步骤:
1、下载Oracle官方提供的tzupdater.jar包;下载地址
https://www.oracle.com/java/technologies/javase-tzupdater-downloads.html
把tzupdater.jar放到java目录bin目录下,比如
“C:\Program Files\JAVA\java-1.8.0-openjdk-1.8.0.201\bin\tzupdater.jar”;
2、查看当前时区数据库版本,以windows为例,用管理员身份运行cmd,切换到tzupdater.jar对应的目录:
java -jar tzupdater.jar -V
3、在线更新,以windows为例,用管理员身份运行cmd,切换到tzupdater.jar对应的目录:(第3种和第4种更新方式任选一种)
java -jar tzupdater.jar -l https://www.iana.org/time-zones/repository/tzdata-latest.tar.gz
如图所示,已经更新成功到了tzdata2021a版本了。
更新后的文件是放在jre/lib/tzdb.dat ,如图所示,它有备份历史的版本。
4、离线更新:要先下载最新的时区数据,下载地址:
https://data.iana.org/time-zones/releases/
以windows为例,用管理员身份运行cmd。切换到tzupdater.jar对应的目录:
java -jar tzupdater.jar -l file:///[path]/tzdata.tar.gz
注:
windows建议放在C盘根目录下,路径目录也不要有中文;
用管理员身份运行cmd(需要写权限);
如上面的命令所示,file后面的/是3个
5、以上执行完后,用第2步的查看当前时区数据库版本命令,查看是否更新成功。
服务自动化升级
思路步骤:
1、设置定时任务(操作系统配置就行),执行tzupdater 更新时区的命令脚本;
2、新开一个时区服务,用来对外提供时区和夏令时规则读取服务,独立部署;
3、在时区服务中,写个同步按钮,用来执行tzupdater 更新时区的命令脚本;
4、在时区服务中,将timeZone数据定时写到自定义的时区表中。提供维护功能,可以自定义新增修改删除timeZone数据。
此思路的好处:
1、其他服务不需要停止服务来更新时间,直接通过调用时区服务的数据,可保证获取到最新的时区数据;
2、自动化的好处,避免了手动维护时区的繁琐,人工介入有引发问题的风险;
3、时区服务和其他业务服务是拆分的,方便未来的扩展。
推荐相关文章
hutool日期时间系列文章
1DateUtil(时间工具类)-当前时间和当前时间戳
2DateUtil(时间工具类)-常用的时间类型Date,DateTime,Calendar和TemporalAccessor(LocalDateTime)转换
3DateUtil(时间工具类)-获取日期的各种内容
4DateUtil(时间工具类)-格式化时间
5DateUtil(时间工具类)-解析被格式化的时间
6DateUtil(时间工具类)-时间偏移量获取
7DateUtil(时间工具类)-日期计算
8ChineseDate(农历日期工具类)
9LocalDateTimeUtil(JDK8+中的{@link LocalDateTime} 工具类封装)
10TemporalAccessorUtil{@link TemporalAccessor} 工具类封装
其他
要探索JDK的核心底层源码,那必须掌握native用法
万字博文教你搞懂java源码的日期和时间相关用法
java的SimpleDateFormat线程不安全出问题了,虚竹教你多种解决方案
源码分析:JDK获取默认时区的风险和最佳实践
高级JAVA开发必须掌握技能:java8 新日期时间API((一)JSR-310:ZoneId 时区和偏移量),2万字详解)
高级JAVA开发必须掌握技能:java8 新日期时间API((二)JSR-310:常用的日期时间API),4万字详解)
参考:
TZUpdater :https://www.oracle.com/java/technologies/javase/tzupdater-readme.html
IANA时区数据版本:https://data.iana.org/time-zones/releases/
JRE 软件中的时区数据版本:https://www.oracle.com/java/technologies/tzdata-versions.html
高级JAVA开发必备技能:时区的规则发生变化时,如何同步JDK的时区规则(实战方案,建议收藏)相关推荐
- 高级JAVA开发必备技能:java8 新日期时间API((一)JSR-310:ZoneId 时区和偏移量)(JAVA 小虚竹)
技术活,该赏 点赞再看,养成习惯 大家好,我是小虚竹.之前有粉丝私聊我,问能不能把JAVA8 新的日期时间API(JSR-310)知识点梳理出来.答案是肯定的,谁让我宠粉呢.由于内容偏多(超十万字了) ...
- 高级java开发_适用于高级Java开发人员的十大书籍
高级java开发 Java是当今最流行的编程语言之一. 有很多适合初学者的书籍. 但是对于那些使用Java进行过一段时间编程的人来说,其中有些人看起来有些简单和多余. 初学者的书没有带来新鲜有趣的想法 ...
- 适用于高级Java开发人员的十大书籍
Java是当今最流行的编程语言之一. 有很多适合初学者的书籍. 但是对于那些使用Java进行过一段时间编程的人来说,其中有些人看起来有些简单和多余. 初学者的书没有带来新鲜有趣的想法. 但是,高级Ja ...
- 高级Java开发人员的十大书籍
高级Java开发人员的十大书籍 Java是当今最流行的编程语言之一.有很多适合初学者的书籍.但对于那些使用Java编程一段时间的人来说,其中一些可能看起来多余.然而,高级Java书籍并不总是在眼前,不 ...
- 高级java开发_我最喜欢的Java高级开发人员书籍
高级java开发 我上一篇博客文章 (我对高级Java开发人员的十个最喜欢的在线资源)的想法,是由Xiaoran Wang发表的"面向高级Java开发人员的十大网站"的启发. Wa ...
- 如何才能成为高级Java开发工程师
根据技术水平不同,Java程序员可以分为初级.中级.高级.资深等.不同级别的Java程序员,企业的要求也是有区别.那么,该如何才能成为高级Java开发工程师? 如何才能成为高级Java开发工程师 想要 ...
- Spring+SpringMVC+Mybatis(开发必备技能)04、mybatis自动生成mapper_dao_model(包含工具与视频讲解) 纯绿色版本、配套使用视频,100%运行成功
Spring+SpringMVC+Mybatis(开发必备技能) 04.mybatis自动生成mapper_dao_model(包含工具与视频讲解) 纯绿色版本.配套使用视频,100%运行成功 百度网 ...
- 序:何为高级java开发工程师?
高级开发工程师 开发工程师的分级 初级java开发 : 中级java开发 高级java开发 技术 业务 管理 开发工程师的分级 在软件开发行业,通常会对工程师做分级,各大厂通常有自己内部的职级划分和评 ...
- eclipse java开发插件_10大Java开发必备的Eclipse插件
原标题:10大Java开发必备的Eclipse插件 今天小编来给大家介绍10个Java开发人员必备的Eclipse 插件,它们有各自的优势,你可以从中选择适合你的那款. 1. EGit EGit是 J ...
最新文章
- jvm垃圾回收器(《深入理解java虚拟机》)
- Windows保护模式学习笔记(一)—— 段寄存器GDT表
- 浅谈域名发散与域名收敛
- udp 传输文件 java_Java 网络编程 之 UDP 文件传输
- primefaces_懒惰的JSF Primefaces数据表分页–第2部分
- 华为mate40RS能升级鸿蒙,mate40Pro和40RS能用上鸿蒙系统吗
- ad 卡尔曼_卡尔曼滤波算法C语言实现(转2)
- JDK可视化工具 | JConsole操作指南,手把手教会你
- 50 岁再次创业:我希望 20 年后还能解 Bug
- Spring+IOC(DI)+AOP概念及优缺点
- mysql流程函数if之类
- ExtJs异步ajax调用和同步ajax调用公用方法(转)
- @uncheck_jQuery Check / Uncheck复选框
- java鼠标乱跑_光标乱跑怎么办 光标乱跑解决方法【图文】
- web中间件应用系列:负载均衡(二)负载均衡算法和常见实现方式
- 数据结构课程设计:17、售票处的服务系统(***)
- Python的Module,Library,Package的区别
- github 下载文件加速 https://moeyy.cn/gh-proxy/
- 计算机组成原理题目透析(2)
- c语言求最大公约数(辗转相除法)
热门文章
- [Kali Linux 安全渗透教程新手版]
- flutter pub get failed (66; , errno = 5))
- 省市县三级连动数据下载from ecshop
- 星之河电子商务亚马逊代理的运营详情
- 10月7日 c语言 函数的递归调用 有5个学生坐在一起,问第五个学生多少岁,比第四个大2岁……最后问第一个学生,他说是10岁
- 棒棒糖-小学数学出题机v1.4.2【更新2019/12/26】
- 好佳居窗帘十大品牌 窗帘行业发展状况分析
- docker学习笔记,三板斧
- 锡兰:真正的进步,还是只是另一种语言?
- Win11提示DNS服务器未响应怎么办?