Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于java.util.Calendar的问题_Java_Date_Calendar_Java.util.date_Java.util.calendar - Fatal编程技术网

关于java.util.Calendar的问题

关于java.util.Calendar的问题,java,date,calendar,java.util.date,java.util.calendar,Java,Date,Calendar,Java.util.date,Java.util.calendar,我试图用下面的代码来理解行为。 我的本地时区是UTC-7(亚利桑那州) 它生成以下输出: 1 UTC-4小时:12 1 UTC-4天:27 1 UTC-7时间戳:2011年9月27日星期二12:40:37 MST 协调世界时2-4小时:0 协调世界时2-4天:28 UTC-7时间戳:2011年9月28日星期三00:40:37 协调世界时3-4小时:3 协调世界时3-4天:28 UTC-7时间戳:2011年9月28日星期三00:40:37 协调世界时4小时:12 协调世界时4天:28 4 UTC-

我试图用下面的代码来理解行为。 我的本地时区是UTC-7(亚利桑那州)

它生成以下输出:

1 UTC-4小时:12
1 UTC-4天:27
1 UTC-7时间戳:2011年9月27日星期二12:40:37 MST
协调世界时2-4小时:0
协调世界时2-4天:28
UTC-7时间戳:2011年9月28日星期三00:40:37 协调世界时3-4小时:3
协调世界时3-4天:28
UTC-7时间戳:2011年9月28日星期三00:40:37 协调世界时4小时:12
协调世界时4天:28
4 UTC-7时间戳:2011年9月28日星期三09:40:37 MST

我不明白的是,为什么第一个cal.set(Calendar.HOUR,12)会导致日期切换到第二天。在一个值上使用add()会导致调整其他值,这是有道理的,但是set()也这样做没有意义

是否有某种方法可以在保留所有其他值的情况下执行绝对设置()。

您设置的是“小时”而不是“一天中的小时”。因此,它将其设置为“下午开始后12小时”-即当天结束时的午夜,因此第二天开始。可以这样想,“我注定是下午,所以将时间设置为
midday+hours*12


我个人认为这仍然有点奇怪,但我还是坚持用一天中的一小时来代替。。。或者更可取的是,首先使用。

是的,我不喜欢这种行为。set(Calendar.HOUR,12)的行为不应因AM_PM的设置而有所不同。我将在我现有的项目中处理这种行为,但在将来,我将研究Joda时间。
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());