刚刚发现java程序在Linux下获取时间,比系统当前时间少8小时。程序如下:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(sdf.format(new Date()));
第一反映是系统默认时区或硬件时钟与系统时钟不同步引起,于是查看。

硬件时钟与系统时间都正常。
记得android开发中,格式化日期需要强制指定时区。于是在Java中找到设置时区的函数:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
sdf.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai");
System.out.println(sdf.format(new Date()));
编译再执行,发现时间正确了。
因为现在运行的项目是已编译好打包运行的,修改源码还是很麻烦的。可以加上启动参数指定时区。
-Duser.timezone=GMT+8
以下是我的tomcat启动脚本:

JRE是从/etc/sysconfig/clock这个文件中获取时区信息的,修改这里的设置也能解决问题:
ZONE="Asia/Shanghai"
UTC=false
ARC=false
ZONE — 时区
UTC — 表明时钟设置为UTC。
ARC — 仅用于alpha表明使用ARC。
发表回复