2017-08-30 60 views
-2

我有下面的代碼檢查,如果給定的日期是否有效現在爪哇 - 檢查一個日期是否有效對於一個給定的日期格式

SimpleDateFormat fromformatter = new SimpleDateFormat("MMYY"); 
fromformatter.setLenient(false); 

try { 
    fromformatter.parse(dateString); 
    valuesQuery.append("'" + dateString+ "',"); 
} catch (ParseException pe) { 
    pe.printStackTrace(); 
    valuesQuery.append("'notDate" + dateString+ "',"); 
} 

,當我得到dateString = "1803";這不是一個有效的日期,也不例外被拋出。這裏使用的日期格式是MMYY

我在做什麼錯了?

請注意,正則表達式不會幫助我,因爲日期格式會改變。

+0

可能的重複[在java中使用SimpleDateFormat解析yyyy/mm/dd到紀元時間戳](https://stackoverflow.com/questions/24217408/parse-yyyy-mm-dd-to-epoch-timestamp-using- simpledateformat-in-java) – 2017-08-30 18:59:50

+2

'm'爲分鐘,'M'爲月份:https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html – 2017-08-30 19:00:15

+0

我試過了MMYY,MMyy的幾個組合。它沒有捕捉到1803的例外 – keanu

回答

1

java.time

利用現代java.time類,而不是麻煩的傳統日期時間類。

具體使用YearMonth來表示這樣的值。這是parse方法會爲無效輸入引發異常。

DateTimeFormatter f = DateTimeFormatter.ofPattern("MMuu") ; 
try { 
    YearMonth ym = YearMonth.parse("1803" , f) ; 
} catch (DateTimeParseException e) { 
    … handle error. 
} 

提示:如果可能的話,使用標準ISO 8601格式,而不是特殊的格式。對於YYYY-MM的年份來說,如2017-07

相關問題