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