造成这种问题的原因是:操作系统时区跟JVM的时区不一致。
[root@paas244 ~]# timedatectl

Local time: Thu 2016-12-29 15:35:44 CST
Universal time: Thu 2016-12-29 07:35:44 UTC
RTC time: Thu 2016-12-29 07:35:45
<strong>Time zone: Asia/Shanghai (CST, +0800)</strong>
NTP enabled: yes
NTP synchronized: yes
RTC in local TZ: no
DST active: n/a

可以看到系统的时区是中国时区。

java程序获取的时间都是GMT时间(格林尼治时间(0时区的时间)),而系统是上海时间,应该是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。

以上内容是网上搜集到的文章,我的解决方案是在程序中使用java的函数设定时区。

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm");
Date d = new Date();
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
String date = simpleDateFormat.format(d);

我需要的时间格式是:HH:mm。

java new Date()得到的时间和系统时间不一样的更多相关文章

  1. java获取获得Timestamp类型的当前系统时间。以及java.util.date 、java.sql.Date之间的转换

    java获取取得Timestamp类型的当前系统时间java获取取得Timestamp类型的当前系统时间 格式:2010-11-04 16:19:42 方法1: Timestamp d = new T ...

  2. java获取获得Timestamp类型的当前系统时间

    java获取取得Timestamp类型的当前系统时间java获取取得Timestamp类型的当前系统时间 格式:2010-11-04 16:19:42 方法1: Timestamp d = new T ...

  3. java获取获得Timestamp类型的当前系统时间。

    java获取获得Timestamp类型的当前系统时间.   java获取取得Timestamp类型的当前系统时间 格式:2010-11-04 16:19:42 方法1: Timestamp d = n ...

  4. 5.6 date:显示与设置系统时间

    date命令 用于显示当前的系统时间或设置系统时间. date [选项] +[日期格式]   date命令的参数选项及说明 OPTION参数选项-d 时间字符串 显示指定字符串所描述的时间,而非当前时 ...

  5. tomcat时间与系统时间不一致问题

    我在部署应用到centos系统上的tomcat服务器中运行,发现操作系统的时间和tomcat中的访问日志的时间与系统时间不一致,但是查看当前操作系统的时区也是CST时区(中国标准时区). 查看系统的时 ...

  6. ubuntu下的时间设定(硬件时间,系统时间,本地时间)

    问题的来由是在这里: 在cron里设定任务是在凌晨6点执行,检查日志时发现时间总是不对,是在22点左右的时间执行的.研究发现,任务是在本地时间的6点执行了,但不知为什么syslog中的时间都是为utc ...

  7. Log4j 输出的日志中时间比系统时间少了8小时的解决方法,log4j日志文件重复输出

    1. 第一个问题:时间少了8小时 Log4j 输出的日志中,时间比系统时间少了8小时,但是 eclipse 控制台输出的日志的时间却是对的. log4j配置如下: #all logger output ...

  8. linux 系统文件类型、系统安装时间、系统启动时间、系统运行时间、设置及显示时间、系统时间和硬件时间

    系统文件类型: 1) $mout 2) df -l:仅列出本地文件系统:-h (--human-readable):-T:文件系统类型 $df -lhf 3) file -s (--special-f ...

  9. Linux的硬件时间、校正Linux系统时间及系统时间调用流程

    第一部分: 一)概述: 事实上在Linux中有两个时钟系统,分别是系统时间和硬件时间 UTC是协调世界时(Universal Time Coordinated)英文缩写,它比北京时间早8个小时.   ...

随机推荐

  1. ubuntu 16.04 设置位wifi热点 方法(手机可链接)亲测可用

    Ubuntu16.04里面可以直接创建热点,而不用像以前的版本,还要其他辅助工具. 具体步骤如下: 1. 点击有上角网络标志,点开编辑链接. 2. 选择 WiFi ,添加一个网络. 3.设置这个网络 ...

  2. 【Java EE 学习 15】【自定义数据库连接池之动态代理的使用】

    一.动态代理的作用 使用动态代理可以拦截一个对象某个方法的执行,并执行自定义的方法,其本质是反射 优点:灵活 缺点:由于其本质是反射,所以执行速度相对要慢一些 二.数据库连接池设计思想 1.为什么要使 ...

  3. 搭建eclipse+github开发环境

    开发环境 1.jdk:jdk1.8.0_60 2.eclipse:eclipse-jee-mars-R-win32-x86_64.zip 配置步骤 1.配置本地git目录(可选) eclipse-je ...

  4. Nginx二级域名及多Server反向代理配置

    Nginx强大的正则表达式支持,可以使server_name的配置变得很灵活,如果你要做多用户博客,那么每个用户拥有自己的二级域名也就很容易实现了. 注:nginx反向代理同一ip多个域名,给head ...

  5. 2016 Multi-University Training Contest 6

    5/12 2016 Multi-University Training Contest 6 官方题解 打表找规律/推公式 A A Boring Question(BH) 题意: ,意思就是在[0,n] ...

  6. 如何直接在ftp里编辑文件

    首先要连接ftp,如何链接ftp,这个我已经分享过,如果还有不懂的,可以查看下经验分享,打开ftp,并连接你要修改的站点!   下载安装代码编辑器,比如EditPlus.sublime text等,随 ...

  7. 【原】iOS学习之应用程序的启动原理

    最近看视频了解了一下应用程序的启动原理,这里就做一个博客和大家分享一下,相互讨论,如果有什么补充或不同的意见可以提出来! 1.程序入口 众所周知,一个应用程序的入口一般是一个 main 函数,iOS也 ...

  8. Jenkins + Ant + Git + Tomcat自动化部署

    环境linux下,大致的配置内容如下: 首先安装JDK配置环境变量等. 其次安装ANT配置ANT_HONE并把bin目录加入PATH中. 然后安装Git,并生成sshkey配置ssh 安装tomcat ...

  9. 搭把手教美工妹妹如何通过升级SSD提升电脑性能

    -----by LinHan 不单单适用于妹子,我这名的意思的妹子也能看懂. 以下教程依据实践和部分互联网资料总结得出,向博客园, CSDN的前辈们致谢:同时,如有说的不正确或有不到位的地方,麻烦指出 ...

  10. JAVA_Android APK反编译就这么简单 详解(附图)

    在学习Android开发的过程你,你往往会去借鉴别人的应用是怎么开发的,那些漂亮的动画和精致的布局可能会让你爱不释手,作为一个开发者,你可能会很想知道这些效果界面是怎么去实现的,这时,你便可以对改应用 ...