我试图用下面的代码来理解这种行为。我当地的时区是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世界协调时-4小时:12 世界协调时1 -4天:27 世界协调时间-7时邮票:Tue 9月27日12:40:37 MST 2011 2世界协调时-4小时:0 2世界协调时-4天:28 世界协调时间2 -7时邮票:Wed 9月28日00:40:37 MST 2011 世界协调时3 -4小时:3 世界协调时3 -4天:28 世界协调时间3 -7时邮票:Wed 9月28日00:40:37 MST 2011 4世界协调时-4小时:12 4世界协调时-4天:28 世界协调时间4 -7时邮票:Wed 9月28日09:40:37 MST 2011
我不明白的是,为什么第一个cal.set(Calendar.HOUR,12)会导致日期切换到第二天。对一个值使用add()会导致对其他值进行调整,这是有意义的,但set()也没有意义。
是否有某种方法可以在保留所有其他值的情况下完成绝对集()?
发布于 2011-09-27 19:28:21
你设置的是“小时”而不是"HOUR_OF_DAY“。因此,它将其设置为“下午开始后12小时”--即当天结束时的午夜,所以下一天开始。把它想成是在说,“我注定要成为首相,所以把时间设置为midday + hours * 12”
就我个人而言,我认为这仍然是有点奇怪的行为,但我会坚持使用HOUR_OF_DAY代替.或者最好首先使用Joda时间。
https://stackoverflow.com/questions/7574558
复制相似问题