【问题标题】:Does GregorianCalendar constructor check invalid input? [duplicate]GregorianCalendar 构造函数是否检查无效输入? [复制]
【发布时间】:2016-04-12 06:03:46
【问题描述】:

GregorianCalendar构造函数有签名:

GregorianCalendar(int year, int month, int dayOfMonth)
GregorianCalendar(int year, int month, int dayOfMonth, int hourOfDay, int minute, int second) 

如果我将monthdayOfMonth 从构造函数合同中传递出去会怎样?

很容易检查月份是否在 0-11 范围内。但是如果不编写自己的日历实现,就不可能检查有效日期(应该是 28/29/30/31?)。

如果 Java 平台检查用户日期输入应该会很好。我不喜欢检查 2015-13-32 是否是自己代码中的有效 ISO 日期。

【问题讨论】:

  • 会发生什么?好吧,试试看吧。
  • 什么也没发生,但这无济于事。因为官方文档没有说什么我问的问题。

标签: java validation datetime


【解决方案1】:

构造函数不检查,你可以做的是在执行 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() 引发)。

【讨论】:

  • 我期待这样的答案))stackoverflow.com/questions/226910/…
  • 要明确什么表达式抛出异常? cal.set()cal.getTime()SimpleDateFormat.format()?
  • 好点,实际上引发异常的是cal.getTime()
猜你喜欢
  • 1970-01-01
  • 2021-03-08
  • 2020-09-17
  • 2021-08-12
  • 2016-01-17
  • 1970-01-01
  • 2017-01-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多