linux系统下java程序获取的时间与系统时间不一致

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux系统下java程序获取的时间与系统时间不一致相关的知识,希望对你有一定的参考价值。

在java程序中我获取了系统当前的时间,但是时间和系统时间不一致,上网查了说是/etc/sysconfig/clock里面时区配置不对,确实刚开始的时候配置是不对,但是我修改了之后还是不对,求大神解答

造成这种问题的原因是:你的操作系统时区跟你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

jre是从/etc/sysconfig/clock这个文件中 获取时区信息的。
附clock文件内容:
ZONE="Asia/Shanghai"
UTC=false
ARC=false
ZONE -- 时区
UTC -- 表明时钟设置为UTC。
ARC -- 仅用于alpha表明使用ARC。      
参考技术A 先确定问题来源:JAVA获得的时区和系统时区哪个有问题
若是JAVA获得的时区有问题,在代码前加上下面这句话就行了:TimeZone tz =TimeZone.getTimeZone("Asia/Shanghai");TimeZone.setDefault(tz)追问

是java获取的时区有问题,程序中太多地方用到了时间的处理,所以改代码太麻烦。另外,相同的程序在另一台linux机器上运行就没有问题

本回答被提问者采纳

我用java的Date类获取系统时间怎么和实际的系统时间时间不一致啊?只是小时不一样 求解。。。。。。

System.out.println(new Date(1320913291421l));
TimeZone tz = TimeZone.getTimeZone("ETC/GMT-8");
TimeZone.setDefault(tz);
System.out.println(new Date(1320913291421l));
你看下结果你就知道怎么改了。
参考技术A 你怎么获取的?
new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new java.util.Date());
是这样的么?
参考技术B 你用的什么系统啊,win7和xp两款系统的时区不同...追问

我用的是xp 时区是北京

以上是关于linux系统下java程序获取的时间与系统时间不一致的主要内容,如果未能解决你的问题,请参考以下文章

win7 系统下java 时间问题

linux系统环境下,怎样在后台才能获取到mac地址?

如何把java程序部署到linux系统下

怎么把在windows系统下写的java程序放到Linux系统上执行

java程序怎样读取linux系统下的文件

java如何获取Linux操作系统下的硬件信息