设为首页 收藏本站
查看: 553|回复: 0

[经验分享] Redhat linux及其Oracle JRE、IBM JRE的时间、时区及夏令时

[复制链接]

尚未签到

发表于 2018-5-12 09:18:34 | 显示全部楼层 |阅读模式
对于集群和分布式等大型系统来说,时间及其同步是个很重要的问题。经过对redhat linux及JRE(包括oracle JRE,IBM JRE)的研究,现总结如下。1,时间的查看
通常的时间可分为local时间和UTC时间,local时间在linux下使用date查看:
# date
Wed Oct 31 17:38:06 BRST 2012
通常这个时间是指所在时区和包括了夏令时计算的时间值。所有使用linux时间的系统打印出的时间都是这个。
UTC时间是指标准格林威治及零时区的时间,不包含夏令时的计算。UTC时间查看方式是:
# date -u
Wed Oct 31 19:38:12 UTC 2012

基本上:Local时间=UTC时间+时区时间差+夏令时时间差
还有硬件时间,及BIOS上存储的时间,查看方式:
# hwclock
Wed 31 Oct 2012 05:38:16 PM BRST  -0.328544 seconds

为了查看JRE的时间,我们写了一个工具:
# cat TestTimeZone.java
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
public class TestTimeZone
{
                private static String DEFAULT_FORMAT = "yyyy-MM-dd HH:mm:ss.SSS (z)";
                private static SimpleDateFormat sdf = new SimpleDateFormat(DEFAULT_FORMAT);
                public static void main(String args[])
                {
                                Date dt = new Date();
                                System.out.println("Current time:\t"+ sdf.format(dt));
                                sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
                                System.out.println("UTC time:\t"+ sdf.format(dt));
                                System.out.println("Env variable user.timezone:" + System.getProperty(""user.timezone"));
                }
}





为了兼容低版本JRE,采用JDK1.4编译,运行:

#/usr/java/j2sdk1.4.2/bin/java TestTimeZone.java
#java TestTimeZone
Current time:   2012-10-31 15:57:47.014 (BRST)
UTC time:       2012-10-31 17:57:47.014 (UTC)

Env variable user.timezone   :America/Bahia


2,Linux时间及JRE的时间关系
先解释下相关配置文件:
/etc/localtime: linux 系统的时区文件,定义linux的时区和夏令时规则
/etc/sysconfig/clock: linux和JRE度要用到的文件,可能没有这个文件,文件内容如:
cat /etc/sysconfig/clock
# The ZONE parameter is only evaluated by system-config-date.
# The timezone of the system is defined by the contents of /etc/localtime.
ZONE="Asia/Shanghai"
UTC=true
ARC=false

ZONE是指时区,对JRE会起作用,对linux会被/etc/localtime中的定义覆盖
UTC是指硬件存储的是否为UTC时间,若为true,则硬件时间当做UTC时间,linux系统启动时会将此事件加上时区和夏令时的差额计算出local时间;若为false则硬件中的时间就是local时间,时区和夏令时规则失效。


当linux系统启动时,首先读取硬件时间,然后根据以上配置文件中的定义计算出时间。
但JRE的时间是独立处理的,JRE自己如linux样独立取得硬件时间,然后根据JRE的时区和夏令时规则计算出JRE的时间。JRE的时区确定规则为:首先确定是否有TZ系统变量(亦为user.timezone, 在启动java程序时亦可通过参数-Duser.timezone单独指定),若有则取TZ变量中的值,若无则取/etc/sysconfig/clock 中的ZONE值。
由上可知,更新时区和夏令时规则时需要同时更新linux和JRE的相关配置和规则的。Linux的夏令时规则在/usr/share/zoneinfo/下;Oracle JRE夏令时规则在:$JAVA_HOME/lib/zi;IBM JRE夏令时规则在$IBM_JAVA_HOME/lib/core.jar。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-458963-1-1.html 上篇帖子: 五天学redhat之 下篇帖子: redhat6.0修改系统时间
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表