问题备忘:解决在debian8系统中Java使用非东八区时区作为默认时区

587 阅读1分钟
原文链接: blog.csdn.net

问题描述:
今天启动java程序时,发现程序使用的US/East-Indiana时区。初步判断原因是debian系统刚安装时使用US时区进行安装,导致系统的默认时区不是东八区。

解决流程

  1. 首先修改/etc/localtime值为CST-8,然后使用linux命令date,发现时间已经是东八区时间。

  2. 然后重启java程序,但是程序中依然使用US/East-Indiana时区。

  3. 有点奇怪,猜测可能是java的启动时,传入的环境变量有问题,通过jps和jinfo获取当前进程的环境里时区的值 执行jps获取当前进程的进程id为13477:

    /usr/lib/jvm/jdk1.8.0_144/bin/jps -v         
    
    13477 jar -Xmx384m -Xms128m -Dlogging.level.root=info

    然后通过jinfo获取当前进程中时区的值,发现依然是US/East-Indiana

    /usr/lib/jvm/jdk1.8.0_144/bin/jinfo 13477
    
    ...
    user.timezone = US/East-Indiana
    ...
  4. 在网络上搜索这个问题,网上大部分解决方案是修改/etc/sysconfig/clock值,但是修改后不能解决我的问题。最后终于发现解决问题方法,修改/etc/timezone:

    Asia/Shanghai
  5. 重启java程序,问题解决

原因分析
在debian和ubuntu系统中,/etc/localtime和/etc/timezone配置的时区如果不一致时,Java程序只会从/etc/timezone中读取默认时区。
我刚开始只修改/etc/localtime为东八区,而/etc/timezone还是US/East-Indiana,则这两个文件表示的时区不一致了,所有java启动时就使用US/East-Indiana时区。只要保证这两个文件的时区相同,就可以解决问题