部署在Tomcat 服務器中的web應用讀取時間與系統時間不一致問題 【靠譜】

    我在部署應用到Ubantu系統上的tomcat服務器中運行,發現操做系統的時間和tomcat中的應用程序獲取的時間不一致,老是相差8個小時,可是查看當前操做系統的時區也是CST時區(中國標準時區)。java

查看系統的時區:windows

root@localhost:~# date +"%Z %z"centos

CST +0800tomcat

      說明時區沒有問題,是東八區時區,可是爲何tomcat啓動的時候沒有使用我設置好的時區呢?最後我經過java代碼直接獲取默認時區,發現輸出的的是:Etc/UTC,怪不得時間差8小時,以下圖:服務器

獲取系統默認時區操作系統

Java代碼獲取系統默認時區:.net

System.out.println(newDate());部署

System.out.println(System.getProperty("user.timezone"));get

      在啓動java程序的時候添加上-Duser.timezone=Asia/Shanghai參數,時區變對了,其緣由是java程序在啓動的時候若是沒有指定時區,默認會根據System.getProperty("user.timezone")去獲取時區操做系統配置文件中配置的時區。同步

Ubantu操做系統時區配置文件是/etc/timezone,將文件中的內容修改爲Asia/Shanghai,保證java程序在啓動的時候初始化時區是東八區。

Centos6.X操做系統的時區配置文件是/etc/sysconfig/clock,將文件內容修改成ZONE="Asia/Shanghai",來修正時區爲東八區,保證java程序在啓動的時候初始化時區是東八區。


 

修改Linux系統時區,以Ubantu和centos6.x爲例:

修改Ubantu系統時區

時區修改爲功

執行:

cp /usr/share/zoneinfo/Asia/Shanghai  /etc/localtime

修改/etc/default/rcS中的UTC=yes改成UTC=no (Centos.x不用作這個操做)

時間同步:ntpdate time.windows.com

硬件時間和系統時間校準:

sudo hwclock --systohc --localtime

 

時區修改爲功,可是記得修改時區默認配置文件/etc/timezone中的內容爲Asia/Shanghai(Centos6.x修改的是/etc/sysconfig/clock文件中的內容爲ZONE="Asia/Shanghai")。

檢查時間是否一致,右下圖可知系統時間和硬件時間已經保持一致了:

檢查時間是否一致

注:在配置時區的時候,注意必定要校準系統時間和硬件時間,讓兩個時間保持一致

      可是,有的時候經過以上步驟仍是解決不了java程序時區問題,java程序讀取時間仍是不對,甚至System.getProperty("user.timezone")都讀不到時區信息,只有System.out.println(java.util.TimeZone.getDefault().getID())能夠讀到,而且讀到的是系統在修改時區的時區信息。主要緣由是咱們在安裝JDK以後發現時間不對纔去修改的系統時區,此時jdk已經默認使用系統修改以前的那個時區,已經改不回來了,刪掉jdk重裝也沒用。

有兩種方法解決這個問題:

一、使用-Duser.timezone=GMT+08來指定時區;

二、就是修改/etc/profile文件,在文件的末尾添加 export TZ='Asia/Shanghai',而後使用命令source /etc/profile使其生效便可。

 

總結:

java程序在初始化時區的時候,若是沒有指定JVM參數-Duser.timezone=GMT+08,java程序就會默認讀取操做系統的時區來初始化java程序的時區。

爲了保證java程序在啓動時加載正確的默認時區:

一、須要將系統的時區改正確

二、還須要將硬件時鐘的系統時鐘校準

三、修改配置文件中的時區參數

四、在/etc/profile文件末尾添加:export TZ='Asia/Shanghai

五、修改tomcat安裝目錄下的bin目錄下的catalina.sh腳本,添加JVM參數JAVA_OPTS="${JAVA_OPTS} -Duser.timezone=GMT+08",來保證Tomcat的時區是東八區時區

做者:cooze 連接:https://www.jianshu.com/p/5b16cb016442 來源:簡書 簡書著做權歸做者全部,任何形式的轉載都請聯繫做者得到受權並註明出處。

相關文章
相關標籤/搜索