簡體   English   中英

Java Calendar如何驗證日期

[英]Java Calendar how to validate date

我正在嘗試驗證給定的日期,但是我不希望這樣。 用戶輸入一個日期,然后將其解析並傳遞給數組,我試圖驗證該日期是否是正確的日期(考慮leap年,2月等),而無需使代碼過長。

        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日,而Im不能完全確定這些數字的來源。 解析日期的代碼是

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

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

當我構建字符串以顯示日期時,它可以正確打印,但是它不適用於Calendar和Im,我不確定Im在做什么。 任何幫助表示贊賞!

使用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

默認情況下, Calendar寬大。 從其方法setLenient的文檔中引用:

如果采用寬大的解釋,則將諸如“ 1996年2月942年”之類的日期視為等同於1996年2月1日之后的第941天。使用嚴格的(非寬容)解釋,這樣的日期將引發異常。 默認值為寬松。

如果要在Calendar上設置無效日期時收到異常,請使用setLenient(false);

否則,2018/02/33將被解釋為2月1日之后的32天,即3月5日。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM