Calendar c = Calendar.getInstance();
c.set(Calendar.MONTH, Calendar.OCTOBER);
c.set(Calendar.DAY_OF_MONTH, 31);
c.set(Calendar.MONTH, c.get(Calendar.MONTH)+1); //Returns Dec 1. Expect Nov 30.
如果我有一个日历对象,并且一个月的最后一天落在第31个月,而下个月的天数比前一个月少,那么我怎样才能确保通过设定未来一个月我将不会超过下个月?
答案 0 :(得分:3)
使用add()
代替set()
,因为日历是"智能"足以确定天数的差异......
public static void main(String[] args) throws Exception {
Calendar c = Calendar.getInstance();
c.set(Calendar.MONTH, Calendar.OCTOBER);
c.set(Calendar.DAY_OF_MONTH, 31);
c.add(Calendar.MONTH, 1);
System.out.println(c.getTime());
}
输出(截至当前运行时):
Sun Nov 30 09:08:01 EST 2014
答案 1 :(得分:2)
<强>从宽强>
Calendar有两种解释日历字段的方式,lenient 而且不宽容。当日历处于宽松模式时,它接受a 比它产生的更广泛的日历字段值。当一个日历 重新计算get()返回的日历字段值,全部 日历字段已标准化。例如,宽大 GregorianCalendar将MONTH == JANUARY,DAY_OF_MONTH == 32解释为 2月1日。
这意味着当您向MONTH添加1时,DAY_OF_MONTH的值仍为31.但是11月没有第31天。这意味着如果您使用的日历是宽松的,它将把MONTH == 11,DAY_OF_MONTH == 31解释为12月1日。