1、前提
由於公司有印尼的項目,該項目僅對印尼當地開放使用(公司在國內,用的是阿里雲的ECS,但是阿里雲在印尼沒有服務器,所以就買了新加坡的服務器),印尼當地人用的是東七區的時間,所以比國內東八區的時間早一個小時。一開始只是修改了阿里雲ECS服務器的系統時間為東七區的時間,但是實際項目獲取到的時間仍是東八區時間。
2、動手
因為之前已經修改了系統的時區為東七區,但是java程序獲得的時間還是東八區的時間。查閱相關資料和問了開發的同事之后,做了如下修改:
1、修改修改/tomcat/bin/catalina.sh,添加如下的參數:
JAVA_OPTS="$JAVA_OPTS -Duser.timezone=GMT+7" #在東幾區就+幾
2、修改/etc/timezone文件
這個是因為我修改上面的操作之后運行java程序獲取的時區還是東八區的,要獲取東八區必須加指定參數”-Duser.timezone=GMT+7”,詢問了開發之后,表示java程序是通過/etc/timezone文件獲取時區的。
cat /etc/timezone
Asia/Jakarta
為此還專門寫了一個java類來獲取時間:

import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.TimeZone; public class Test { public static void main(String[] a) { DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//設置日期格式 System.out.println(df.format(new Date()));// new Date()為獲取當前系統時間 Calendar cal = Calendar.getInstance(); TimeZone timeZone = cal.getTimeZone(); System.out.println(timeZone.getID()); System.out.println(timeZone.getDisplayName()); } }
測試:
[root@iZt4nbfbkurxm1k2bmdsqvZ bin]# javac Test.java [root@iZt4nbfbkurxm1k2bmdsqvZ bin]# java Test 2017-09-27 13:15:45 Asia/Jakarta West Indonesia Time [root@iZt4nbfbkurxm1k2bmdsqvZ bin]#
聯系印尼方測試成功!!!