GregorianCalendar构造函数有签名:
GregorianCalendar(int year, int month, int dayOfMonth)
GregorianCalendar(int year, int month, int dayOfMonth, int hourOfDay, int minute, int second)
如果我从构造函数合同中传递month
或dayOfMonth
会怎样?
很容易检查0-11范围内的月份。但是如果不编写自己的日历实现,就无法检查有效日期(应该是28/28/30/31?)。
如果Java平台检查用户日期输入,那应该很好。我不想在自己的代码中检查2015-13-32
是否是有效的ISO日期。
答案 0 :(得分:2)
构造函数不检查,你可以做的是设置执行setLenient(false)后的时间,这将使Calendar只接受有效值:
Calendar cal = Calendar.getInstance();
cal.setLenient(false);
cal.set(2016, Calendar.FEBRUARY, 30);
System.out.println(new SimpleDateFormat("dd/MM/yyyy").format(cal.getTime()));
此示例将抛出异常,因为02/30/2016不是有效日期(cal.getTime()
抛出异常)。