2017-08-30 57 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

相关问题