分类
Java 笔记

Java在Linux获取时间不一至

刚刚发现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。

发表评论

电子邮件地址不会被公开。