使用日历检查日期是否有效

时间:2013-07-02 21:58:57

标签: java

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

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

我设置了calendar.setLenient(false)并且预计将值设置为1月33日会抛出异常,但事实并非如此。

2 个答案:

答案 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); 

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