我試圖設置HOUR_OF_DAY字段並更改GregorianCalendar日期對象的時區。Java GregorianCalendar更改時區
GregorianCalendar date = new GregorianCalendar(TimeZone.getTimeZone("GMT+10"));
System.out.println("HOUR: " + date.get(Calendar.HOUR_OF_DAY));
date.set(Calendar.HOUR_OF_DAY, 23);
//date.get(Calendar.HOUR_OF_DAY);
date.setTimeZone(TimeZone.getTimeZone("GMT"));
System.out.println("HOUR: " + date.get(Calendar.HOUR_OF_DAY));
輸出:
HOUR: 16
HOUR: 23
對於HOUR_OF_DAY的一些原因值設定不同的時區後不會改變。但是,如果我去掉date.get的HOUR_OF_DAY,一切正常,正是因爲它應該
GregorianCalendar date = new GregorianCalendar(TimeZone.getTimeZone("GMT+10"));
System.out.println("HOUR: " + date.get(Calendar.HOUR_OF_DAY));
date.set(Calendar.HOUR_OF_DAY, 23);
date.get(Calendar.HOUR_OF_DAY); // uncommenting this line will is changing the output
date.setTimeZone(TimeZone.getTimeZone("GMT"));
System.out.println("HOUR: " + date.get(Calendar.HOUR_OF_DAY));
輸出:
HOUR: 16
HOUR: 13
這怎麼可能?爲什麼.get方法正在改變對象的行爲?