如果我们在当前日期(2013 年 5 月 31 日星期五 18:33:00 IST 2013)中添加 1 个月,则会产生:
2013 年 6 月 30 日星期日 18:33:00 国际标准时间
如果我们减去 1 个月,则得出:
2013 年 5 月 30 日星期四 18:33:00 国际标准时间
这是一个错误还是任何人都可以提供推理?
请找到相同的代码:
Calendar c1 = Calendar.getInstance()
System.out.println(c1.getTime());
c1.add(Calendar.MONTH, 1);
System.out.println(c1.getTime());
c1.add(Calendar.MONTH, -1);
System.out.println(c1.getTime());
Output
Fri May 31 18:33:00 IST 2013
Sun Jun 30 18:33:00 IST 2013
Thu May 30 18:33:00 IST 2013
月份中某一天的变化是预期的行为,记录在此处,如“添加规则 2”:http://docs.oracle.com/javase/6/docs/api/java/util/Calendar.html http://docs.oracle.com/javase/6/docs/api/java/util/Calendar.html
添加(f,增量)将 delta 添加到字段 f。这相当于调用 set(f, get(f) + delta) 并进行两次调整:
添加规则 1。调用后字段 f 的值减去调用前字段 f 的值是 delta,以字段 f 中发生的任何溢出为模。当字段值超出其范围时就会发生溢出,因此下一个较大的字段会递增或递减,并且字段值会调整回其范围内。
添加规则2。如果一个较小的字段期望保持不变,但由于字段 f 改变后其最小值或最大值发生变化或其他约束(例如时区偏移量变化),它不可能等于其先前值,则其值调整到尽可能接近其期望值。较小的字段表示较小的时间单位。 HOUR 是一个比 DAY_OF_MONTH 小的字段。不对预计不会不变的较小字段进行调整。日历系统确定哪些字段应保持不变。
有了这些规则,如果您添加 1 个月,然后添加 -1 个月,则无法保留月份中的某一天。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)