HOUR_OF_DAY フィールドを設定し、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 の値が変更されません。しかし、HOUR_OF_DAY の date.get のコメントを外すと、すべてが正常に機能します。
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 メソッドがオブジェクトの動作を変更するのはなぜですか?