Java日历如何验证日期

标签 java

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

        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

}

如果我输入 2018/02/33 并将其打印出来,它会显示日期为 2018 年 3 月 5 日,但我不确定这些数字来自哪里。解析日期的代码是

String dateGiven[] = validDate.split("/");

  validYear = Integer.parseInt(dateGiven[0]);
  validMonth = Integer.parseInt( dateGiven[1] );
  validDay = Integer.parseInt( dateGiven[2] );

当我构建字符串来显示它正确打印的日期时,但它不适用于日历,我不确定我做错了什么。如有任何帮助,我们将不胜感激!

最佳答案

使用 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日历如何验证日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49225273/

相关文章:

java - Android Java Textbox.append 无法在新线程中工作

java - Java 中使用哪个类来保存时间和日期

java - 使用 JUnit 对 Java 中 Daemon Thread 的代码进行单元测试

java - 增加 JPanel 的高度及其内容

java - Spring Property Placeholder 读取的属性是否立即可用?

java - 更具表现力的代码

java - 流中的 If 语句

java - GWT 打开文件中的 Window.open()

java - 如何计算非常大的 BigInteger 数字的 GCD 而不会出现 stackoverflow 异常?

java - PAM "pam_unix.so"身份验证有时会失败