Java中的時間僅僅是一個簡單的長值(自1970年以來毫秒)沒有關於時區的任何信息。 java.util.Date
和java.sql.Date
也將內部的日期/時間存儲爲自1970年以來的毫秒,但具有UTC時區。
時區進場時,當你格式化輸出,或當你從一個字符串分析日期/時間的日期/時間。您通過-Duser.timezone
設置的時區信息將在當時使用。
所以它應該工作以及一個小的測試也顯示內容:
public static void main(String[] args) {
Calendar c = Calendar.getInstance();
c.set(2013, 2, 30, 23, 0, 0);
long start = c.getTimeInMillis();
long oneHour = 1000 * 60 * 60;
long t = start;
for (long i = 0; i < 5; i++) {
System.out.println(new Date(t));
t = t + oneHour;
}
}
使用-Duser.timezone=GMT
它將打印:(無開關)
Sat Mar 30 23:00:00 GMT 2013
Sun Mar 31 00:00:00 GMT 2013
Sun Mar 31 01:00:00 GMT 2013
Sun Mar 31 02:00:00 GMT 2013
Sun Mar 31 03:00:00 GMT 2013
使用-Duser.timezone=CET
它將打印:(開關在凌晨2點)
Sat Mar 30 23:00:00 CET 2013
Sun Mar 31 00:00:00 CET 2013
Sun Mar 31 01:00:00 CET 2013
Sun Mar 31 03:00:00 CEST 2013
Sun Mar 31 04:00:00 CEST 2013
使用-Duser.timezone=EET
它將打印:(東歐洲時間,一小時後,CET)
Sat Mar 30 23:00:00 EET 2013
Sun Mar 31 00:00:00 EET 2013
Sun Mar 31 01:00:00 EET 2013
Sun Mar 31 02:00:00 EET 2013
Sun Mar 31 04:00:00 EEST 2013
非常感謝您的詳細解答和解決我的問題。 – AlexWerz 2013-02-20 14:07:29