7

我想使用日历方法来设置年份日期和月份,但如果日期无效,则需要某种指示,例如

calendar.set(2013,Calendar.JANUARY , 23) //is a valid date
calendar.set(2013,Calendar.JANUARY , 33) //is not

我设置calendar.setLenient(false)并期望将值设置为 1 月 33 日会引发异常,但事实并非如此。

4

2 回答 2

8

似乎检查是懒惰的:

如果设置了任何超出范围的字段值,非宽松的 GregorianCalendar 在计算其时间或日历字段值时会引发异常。

所以这会给你一个异常:

Calendar c = new GregorianCalendar();
c.setLenient(false);
c.set(2013, Calendar.JANUARY, 33);
c.getTime();

但并非没有getTime.

于 2013-07-02T22:05:47.077 回答
3

宽恕仅控制日历是否接受超出范围的日期。如果设置了 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); 

并与您的日值进行比较。如果您的日期值在范围内,那么您可以继续。

于 2013-07-02T22:10:31.733 回答