日历下个月

时间:2014-10-01 13:01:01

标签: java calendar

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个月,而下个月的天数比前一个月少,那么我怎样才能确保通过设定未来一个月我将不会超过下个月?

2 个答案:

答案 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 JavaDocs

  

<强>从宽

     

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日。