我想使用日历方法来设置年份日期和月份,但如果日期无效,则需要某种指示,例如
calendar.set(2013,Calendar.JANUARY , 23) //is a valid date
calendar.set(2013,Calendar.JANUARY , 33) //is not
我设置了calendar.setLenient(false)
并且预计将值设置为1月33日会抛出异常,但事实并非如此。
答案 0 :(得分:8)
似乎检查是懒洋洋地完成的:
如果设置了任何超出范围的字段值,则非宽松的GregorianCalendar会在计算其时间或日历字段值时抛出异常。
所以这会给你一个例外:
Calendar c = new GregorianCalendar();
c.setLenient(false);
c.set(2013, Calendar.JANUARY, 33);
c.getTime();
但不是没有getTime
。
答案 1 :(得分:3)
宽恕仅控制日历是否接受超出范围的日期。如果设置了宽大处理,Java将进行一些数学调整以调整超出范围的日期(例如,2013-12-32变为2014-01-01)。如果未设置lenalent,Java将不允许这样做,但在您实际请求某些字段之前,它不会检查超出范围的数据。来自Javadocs:
如果设置了任何超出范围的字段值,则非宽松的GregorianCalendar会在计算其时间或日历字段值时抛出异常。
然后问你的问题:
我该如何处理?
您可以将日历设置为该月的第一天:
calendar.set(2013, Calendar.JANUARY, 1);
然后调用
int days = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
并与您的日期值进行比较。如果您的日期值在范围内,那么您可以继续。