Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java日历如何验证日期_Java - Fatal编程技术网

Java日历如何验证日期

Java日历如何验证日期,java,Java,我正在尝试验证给定的日期,但它无法按我希望的方式工作。用户输入一个日期,它被解析并传递给一个数组,我试图验证该日期是否正确(考虑闰年、二月等),而不会使代码变得非常冗长 Calendar calendar = new GregorianCalendar(getValidYear(), getValidMonth() - 1, getValidDay()); if( validYear < 2010 ) { throw new InvalidDateExc

我正在尝试验证给定的日期,但它无法按我希望的方式工作。用户输入一个日期,它被解析并传递给一个数组,我试图验证该日期是否正确(考虑闰年、二月等),而不会使代码变得非常冗长

        Calendar calendar = new GregorianCalendar(getValidYear(), getValidMonth() - 1, getValidDay());


  if( validYear < 2010 )
  {
    throw new InvalidDateException("Year must be greater than 2009");
  } else {

    if(validMonth < 1 || validMonth > 12 )
    {
      throw new InvalidDateException("Month value must be greater than or equal to 1 or less than or eqaul to 12");
    } else {

      if(validDay > calendar.getActualMaximum(Calendar.DAY_OF_MONTH) || validDay <= 0)
      {
        throw new InvalidDateException(String.format ("Day value must be greater than 0 and less than or equal to %s ",
                                                       calendar.getActualMaximum(Calendar.DAY_OF_MONTH) ) );


      } 
    }//end nested if month

  }//end nested IF year

}

当我构建字符串来显示它正确打印的日期时,它不能与日历一起工作,我不确定我做错了什么。感谢您的帮助

使用Java 8时间特性会更容易:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
LocalDate date = LocalDate.parse("2018/02/33", formatter);
当日期无效时,将导致
DateTimeException

java.time.DateTimeException: Invalid value for DayOfMonth (valid values 1 - 28/31): 33

使用Java 8时间特性会更容易:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
LocalDate date = LocalDate.parse("2018/02/33", formatter);
当日期无效时,将导致
DateTimeException

java.time.DateTimeException: Invalid value for DayOfMonth (valid values 1 - 28/31): 33

默认情况下,
日历
是宽松的。引用其方法的文件:

在宽大的解释下,诸如“1996年2月942日”之类的日期将被删除 被视为相当于2月1日后的第941天, 1996在严格(不宽容)的解释下,此类日期将导致抛出异常。默认为宽松

如果希望在
日历上设置无效日期时收到异常,请使用
setLenient(false)


否则2018/02/33将被解释为2月1日后32天,即3月5日。

日历默认为宽松。引用其方法的文件:

在宽大的解释下,诸如“1996年2月942日”之类的日期将被删除 被视为相当于2月1日后的第941天, 1996在严格(不宽容)的解释下,此类日期将导致抛出异常。默认为宽松

如果希望在
日历上设置无效日期时收到异常,请使用
setLenient(false)


否则2018/02/33将被解释为2月1日之后的32天,也就是3月5日。

不要使用
日历
,使用
java.time
。仅供参考,诸如和
java.text.SimpleDateFormat等麻烦的旧日期时间类现在被内置在java 8和java 9中的类所取代。请参阅。不要使用
日历
,使用
java.time
。仅供参考,像、
java.text.simpleDataFormat等麻烦的旧日期时间类现在被内置于java 8和java 9中的类所取代。看见