造成这种问题的原因可能是:你的操作系统时区跟你JVM的时区不一致。

你的操作系统应该是中国的时区吧,而JVM的时区不一定是中国时区,你在应用服务器的Java虚拟机添加如下配置:

-Dfile.encoding=UTF8     -Duser.timezone=GMT+08

在一个精简的Linux安装上jre,发现所有的java程序获取的时间都不是系统时间。后来发现原来是时区不对。java程序获取的时间都是GMT时间,而系统是北京时间,应该是GMT+8,刚好相差8小时。网上搜了好多资料,只有两种方法:

1、在程序中使用java的函数设定时区。

2、在启动java程序时加参数-Duser.timezone=GMT+8

不过总不能去修改每个程序的源码去设定时区吧。也不想在每个java程序启动的时候加参数,太麻烦了。就没有一劳永逸的办法了?

开始以为jre应该会有某个配置文件保存了时区的配置,结果一无所获。不过总有jre总要去系统中获取时区配置吧。于是开始想是不是java用的是

linux中的系统配置文件?于是到linux系统下/etc/sysconfig目录看时区配置。发现缺少了clock这个用于设置时区的文件。把别的

linux系统中的这个文件拷过来一试,ok。java程序的时间和系统时间一致了。看来jre是从/etc/sysconfig/clock这个文件中

获取时区信息的。

附clock文件内容:

ZONE="Asia/Shanghai"

UTC=false

ARC=false

ZONE -- 时区

UTC  -- 表明时钟设置为UTC。

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

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐