JVM时间显示问题



当前时区使用的CST +8时区,但是使用JVM输出时,默认确实使用的 GMT 即国际标准时区,

亚洲等国家正好相差8个小时。
这时候查看jvm源码可以发现
System.out.println(TimeZone.getDefault()); 
它是根据JAVA_HOME以及country调用本地方法实现的
private static native String getSystemTimeZoneID(String javaHome, String  country );  
如果是调用本地,那么一定和本地配置有关系。
解决方法: System.setProperty("user.timezone","Asia/Shanghai");
使用这种方式来增加时区的识别,但是对于程序来说,每次都加上这段代码并不合理,故而我们从本地中进行解决。

GMT(Greenwich Mean Time,格林威治标准时间):  是指位于英国伦敦郊区的皇家格林尼治天文台的标准时间。
UTC(Universal Time/Temps Cordonné 世界标准时间)
CST(Central Standard Time 國家標準時間,一說中原標準時間),中国标准时间(China Standard Time)
GMT + 8 = UTC + 8 = CST
使用Linux的时区选择命令,对时区进行更改(/etc/sysconfig/clock 可以查看当前时区)
tzselect
一步一步选择完成之后,出现如下的配置:

根据提示我们设置TZ的环境变量之后便显示正确了。
当然这样做,笔者亲测还是有问题的,表现在使用Log4j 打印日志,日期还是不正确,参看网上一些资料,建议使用下面
[root@lenovo1 data]# cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 
cp:是否覆盖"/etc/localtime"? y
[root@lenovo1 data]# date
2016年 10月 09日 星期日 21:03:42 CST
[root@lenovo1 data]# date
2016年 10月 09日 星期日 21:03:45 CST
[root@lenovo1 data]# java -jar time.jar 
CN
sun.util.calendar.ZoneInfo[id= "PRC",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null]
time.jar 中主要是测试语句,查看系统的默认时区。

3、硬件时间和系统时间的同步

按照前面的说法,重新启动系统,硬件时间会读取系统时间,实现同步,但是在不重新启动的时候,需要用hwclock或clock命令实现同步。

硬件时钟与系统时钟同步:

# hwclock --hctosys(hc代表硬件时间,sys代表系统时间)

或者

# clock --hctosys

系统时钟和硬件时钟同步: # hwclock --systohc 或者 # clock --systohc

针对中国时区,修改操作如下
1.   
  修改文件  /etc/sysconfig/clock内容:
  ZONE=Asia/Shanghai 
  UTC=false 
  ARC=false
2.   
  rm /etc/localtime
  ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值