linux jvm 参数时间,Linux下jvm时区设置-JAVA时区问题

我会带着你远行 2023-01-20 11:57 610阅读 0赞

2008-10-14 15:05

今天遇到一个问题,就是本机数据传到另外一台机器后时间加了8个小时,查资料了解了一下。

当使用JAVA网络编程的时候,需要注意:时区。user.timezone

可以使用下面的代码遍历当前的系统属性。

//———————————————————————————————————————

final Properties p = System.getProperties();

final Enumeration e = p.keys();

while (e.hasMoreElements())

{

final String prt = (String) e.nextElement();

final String prtvalue = System.getProperty(prt);

System.out.println(prt + “:” + prtvalue);

}

//————————————————————————————————————————

输出中有一项:user.timezone,是JVM当前系统的时区。你要检查运行机器上的时区是否一致,所以代码最好是使用时间的时候统一设置。

//—————————————————————————————————————

final TimeZone zone = TimeZone.getTimeZone(“GMT+8”);

//————————————————————————————————————-

设置默认时区。当然你可以这样检查一下:

//—-

System.out.println(TimeZone.getDefault()); //输出当前默认时区

final TimeZone zone = TimeZone.getTimeZone(“GMT+8”); //获取中国时区

TimeZone.setDefault(zone); //设置时区

System.out.println(TimeZone.getDefault()); //输出验证

//—-

除了上面的解决方法外,还可以:

在TOMCAT的JAVA运行参数添加 -Duser.timezone=Asia/Shanghai

或者,如果有启动的定时器或首次执行的代码,可以使用语句

System.setProperty(“user.timezone”,”Asia/Shanghai”);

来设置

但是为解决时区问题,这样编码实在太烦,所以你要知道如何从根本上解决问题:

LINUX下:jre是从/etc/sysconfig/clock这个文件中获取时区信息的,修改次文件即可,没有的话添加一个。

附clock文件内容:

ZONE=”Asia/Shanghai”

UTC=false

ARC=false

ZONE — 时区

UTC — 表明时钟设置为UTC。

ARC — 仅用于alpha表明使用ARC。

但是windows下,据说是修改:

Drive

:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\60\Config 很遗憾我没有搞定,参考:http://support.microsoft.com/kb/888253/zh-cn

补充:搞定windows下的方法:

检查注册表:

SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones 是不是有问题,我的问题是很多缺失,JAVA底层读取注册表的时候,还没有读到中国标准时间,就终止了,取的是默认的GMT标准时间,和我机器上的时间差8个小时。

你可以找一份完好的注册表信息导进去,也可以删除损坏的在中国时区前面的那些不用的其他时区,保证中国时区正确就行了。

发表评论

表情:
评论列表 (有 0 条评论,610人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Linux设置时区

    1. 首先要确定时区 时区设置用tzselect 命令来实现。但是通过tzselect命令设置TZ这个环境变量来选择的时区,需要将变量添加到.profile文件中。