opi*_*ike 4 java calendar date java.util.date java.util.calendar
我试图通过以下代码了解行为.我当地的时区是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());
Run Code Online (Sandbox Code Playgroud)
它生成此输出:
1 UTC -4小时:12
1 UTC -4天:27
1 UTC -7时间戳:Tue Sep 27 12:40:37 MST 2011
2 UTC -4小时:0
2 UTC -4天:28
2 UTC -7时间邮票:Wed Sep 28 00:40:37 MST 2011
3 UTC -4小时:3
3 UTC -4天:28
3 UTC -7时间戳:Wed Sep 28 00:40:37 MST 2011
4 UTC -4小时:12
4 UTC -4天:28
4 UTC -7时间戳:2011年9月28日星期三09:40:37 MST 2011
我不明白的是为什么第一个cal.set(Calendar.HOUR,12)导致日期翻到第二天.有意义的是,在一个值上使用add()会导致其他值被调整,但set()也没有意义.
有没有办法做一个绝对的set(),其中保留所有其他值?