java new Date()得到的時間和系統時間不一樣


造成這種問題的原因可能是:你的操作系統時區跟你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

不過總不能去修改每個程序的源碼去設定時區吧。也不想在每個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。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM