Java GregorianCalendar.set(字段,值+;1)是否与GregorianCalendar.add(字段,1)相同
对于以下代码段Java GregorianCalendar.set(字段,值+;1)是否与GregorianCalendar.add(字段,1)相同,java,gregorian-calendar,Java,Gregorian Calendar,对于以下代码段 GregorianCalendar a = new GregorianCalendar(2009, 11, 10); System.out.println(a.getTime()); // Thu Dec 10 00:00:00 ICT 2009 a.add(Calendar.MONTH, 1); System.out.println(a.getTime()); // Sun Jan 10 00:00:00 ICT 2010 当我换这行的时候 a.add(Calendar.MO
GregorianCalendar a = new GregorianCalendar(2009, 11, 10);
System.out.println(a.getTime()); // Thu Dec 10 00:00:00 ICT 2009
a.add(Calendar.MONTH, 1);
System.out.println(a.getTime()); // Sun Jan 10 00:00:00 ICT 2010
当我换这行的时候
a.add(Calendar.MONTH, 1);
进入这一行
a.set(Calendar.MONTH, a.get(Calendar.MONTH) + 1);
它返回相同的结果
// Sun Jan 10 00:00:00 ICT 2010
如果是2009年12月,我想将其设置为月+1(即1月),现在应该是2009年1月。但现在是2010年1月
那么,在这种情况下,set和add之间有什么区别呢?按指定的数量递增日历。在你的情况下,它会增加一个月
将字段设置为指定值,其他字段保持不变。在您的情况下,它将月份设置为一月
另见:
按指定值递增指定字段,但保留较高字段(在您的情况下,年份)不变(2010年10月+4个月=>2010年2月)按指定量递增日历。在你的情况下,它会增加一个月
将字段设置为指定值,其他字段保持不变。在您的情况下,它将月份设置为一月
另见:
按指定值递增指定字段,但保留较高字段(在您的情况下,年份)不变(2010年10月+4个月=>2010年2月)如果已设置默认值,则将向当前日历添加值。(在您的情况下) 如果要设置月份值,可以在设置日期之前按如下方式进行设置 日历cal=GregorianCalendar.getInstance(); 校准设置(日历月,0)代码>
将返回月份为一月如果您已设置默认值,则它将向当前日历添加值。(在您的情况下) 如果要设置月份值,可以在设置日期之前按如下方式进行设置 日历cal=GregorianCalendar.getInstance(); 校准设置(日历月,0)代码>
将返回月份,如一月似乎
集
实际上是在该月比十二月多一个月的年份中递增:
在下面
a.set(Calendar.MONTH, a.get(Calendar.MONTH) + 1);
a.get(Calendar.MONTH)
是12月,当您在上面加1,并将结果设置为Calendar对象时,逻辑上它实际上是下一年的1月,因此在这种情况下,更改年的值也很公平
否则,日历实例将处于非法状态,月份值无效
您可以查看以下代码的详细信息:
Calendar cal = new GregorianCalendar(2009, Calendar.DECEMBER, 10);
System.out.println(cal.getTime());
cal.set(Calendar.MONTH, Calendar.DECEMBER + 1);
System.out.println(cal.getTime());
cal.set(Calendar.MONTH, Calendar.JANUARY + 5);
System.out.println(cal.getTime());
cal.set(Calendar.MONTH, Calendar.DECEMBER + 13);
System.out.println(cal.getTime());
cal.set(Calendar.MONTH, -3);
System.out.println(cal.getTime());
输出为:
Thu Dec 10 00:00:00 CST 2009
Sun Jan 10 00:00:00 CST 2010
Thu Jun 10 00:00:00 CDT 2010
Tue Jan 10 00:00:00 CST 2012
Mon Oct 10 00:00:00 CDT 2011
2009年12月10日星期四00:00:00 CST
2010年1月10日星期日00:00:00 CST
2010年6月10日星期四00:00:00 CDT
2012年1月10日星期二00:00:00中央标准时间
2011年10月10日星期一00:00:00加拿大东部时间
因此,如果设置的月份的值超出范围,则年份的值将发生更改。似乎
set
实际上是在月份比12月多一个月份时增加年份:
在下面
a.set(Calendar.MONTH, a.get(Calendar.MONTH) + 1);
a.get(Calendar.MONTH)
是12月,当您在上面加1,并将结果设置为Calendar对象时,逻辑上它实际上是下一年的1月,因此在这种情况下,更改年的值也很公平
否则,日历实例将处于非法状态,月份值无效
您可以查看以下代码的详细信息:
Calendar cal = new GregorianCalendar(2009, Calendar.DECEMBER, 10);
System.out.println(cal.getTime());
cal.set(Calendar.MONTH, Calendar.DECEMBER + 1);
System.out.println(cal.getTime());
cal.set(Calendar.MONTH, Calendar.JANUARY + 5);
System.out.println(cal.getTime());
cal.set(Calendar.MONTH, Calendar.DECEMBER + 13);
System.out.println(cal.getTime());
cal.set(Calendar.MONTH, -3);
System.out.println(cal.getTime());
输出为:
Thu Dec 10 00:00:00 CST 2009
Sun Jan 10 00:00:00 CST 2010
Thu Jun 10 00:00:00 CDT 2010
Tue Jan 10 00:00:00 CST 2012
Mon Oct 10 00:00:00 CDT 2011
2009年12月10日星期四00:00:00 CST
2010年1月10日星期日00:00:00 CST
2010年6月10日星期四00:00:00 CDT
2012年1月10日星期二00:00:00中央标准时间
2011年10月10日星期一00:00:00加拿大东部时间
因此,如果设置的月份的值超出范围,则年的值将更改