我正在尝试理解以下代码的行为。 我的本地时区是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 Hour:12 1 UTC -4 Day:27 1 UTC -7 Time Stamp:Tue Sep 27 12:40:37 MST 2011 2 UTC -4 Hour:0 2 UTC -4 Day:28 2 UTC -7 Time Stamp: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 Day:28 4 UTC -7 Time Stamp:Wed Sep 28 09:40:37 MST 2011
我不理解的是为什么第一个cal.set(Calendar.HOUR,12)会导致日期翻转到下一天。使用add()调整一个值会导致其他值被调整是有道理的,但是set()也做到这一点就没有道理了。
是否有一种绝对的set()方法可以保留所有其他值?