次のコードで動作を理解しようとしています。私のローカルタイムゾーンはUTC-7(アリゾナ)です。
Calendar cal = Calendar.getInstance();
cal.set(Calendar.MINUTE,40);
cal.set(Calendar.AM_PM,Calendar.PM);
System.out.println("1 UTC -4 Hour:" + cal.get(Calendar.HOUR_OF_DAY));
System.out.println("1 UTC -4 Day:" + cal.get(Calendar.DAY_OF_MONTH));
System.out.println("1 UTC -7 Time Stamp:" + cal.getTime().toString());
cal.set(Calendar.HOUR,12);
System.out.println("2 UTC -4 Hour:" + cal.get(Calendar.HOUR_OF_DAY));
System.out.println("2 UTC -4 Day:" + cal.get(Calendar.DAY_OF_MONTH));
System.out.println("2 UTC -7 Time Stamp:" + cal.getTime().toString());
cal.setTimeZone(TimeZone.getTimeZone("America/New_York")); //set time zone to UTC -4
System.out.println("3 UTC -4 Hour:" + cal.get(Calendar.HOUR_OF_DAY));
System.out.println("3 UTC -4 Day:" + cal.get(Calendar.DAY_OF_MONTH));
System.out.println("3 UTC -7 Time Stamp:" + cal.getTime().toString());
cal.set(Calendar.HOUR,12);
System.out.println("4 UTC -4 Hour:" + cal.get(Calendar.HOUR_OF_DAY));
System.out.println("4 UTC -4 Day:" + cal.get(Calendar.DAY_OF_MONTH));
System.out.println("4 UTC -7 Time Stamp:" + cal.getTime().toString());
次の出力を生成します。
1 UTC -4時間:12
1 UTC -4日:27
1 UTC -7タイムスタンプ:火9月27日12:40:37 MST 2011
2 UTC -4時間:0
2 UTC -4日:28 2UTC-
7時間スタンプ:Wed Sep 28 00:40:37 MST 2011
3 UTC -4 Hour:3
3 UTC -4 Day:28
3 UTC -7 Time Stamp:Wed Sep 28 00:40:37 MST 2011
4 UTC -4 Hour:12
4 UTC -4日:28
4 UTC -7タイムスタンプ:水9月28日09:40:37 MST 2011
私が理解していないのは、最初のcal.set(Calendar.HOUR、12)によって日付が翌日に反転する理由です。1つの値にadd()を使用すると、他の値が調整されることは理にかなっていますが、set()がそれを行うことも意味がありません。
他のすべての値が保持される絶対set()を実行する方法はありますか?