Date、Calendar、時區之間的關係

Date
Java中的絕對時間,都是從1970年1月1日0點0分GMT時間起,因此轉化爲時間戳(毫秒)時都是一樣的數字,都是記錄了從那一刻開始的時間記錄。

Date輸出時之所以有不同時區區別主要在於其toString方法,使用了本地機器的時區設置。

...
TimeZone zi = date.getZone();
if (zi != null) {
    sb.append(zi.getDisplayName(date.isDaylightTime(), TimeZone.SHORT, Locale.US)); // zzz
} else {
    sb.append("GMT");
}
...

Calendar
日曆是相對時間,其所顯示與獲取到的數據都以本地機器的時區設置爲準,因此如果想獲取到指定時區的時間信息時,應該進行相應時區設置。如:

Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.DATE, days);
cal.setTimeZone(TimeZone.getTimeZone(CHINA_TIME_ZONE));
System.out.println(cal.get(Calendar.HOUR_OF_DAY));

或提前設置時區,然後再使用Calendar相關信息。

時區:
本地機器時區設置不同,時間顯示不同,在進行轉化顯示或特定信息判斷時尤其注意時區問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章