SimpleDateFormat.parse( “MM / YYYY”)

时间:2018-03-13 12:48:59

标签: java date simpledateformat date-parsing

我正在尝试实现一个将String解析为Date的方法,我想使用SimpleDateFormat,因为这似乎可以完成这项工作:

java.util.Date parseMonth(String str) throws ParseException {
    SimpleDateFormat format=new SimpleDateFormat("MM/yyyy");
    return format.parse(str);
}

但由于某些原因,我得到的输入没有ParseException,我希望得到一个。

  • “00/2000” - > 1999-12-01,没有例外
  • “13/2000” - > 2001-01-01,没有例外

检查String是否是正确日期(关于某些实现依赖格式)的首选方法是什么?

1 个答案:

答案 0 :(得分:2)

默认情况下,

SimpleDateFormat是宽松的,因此它会尝试变聪明(通常是失败的)并执行“月零变为上一年的12月”等事情。

要使无效输入抛出异常,只需禁用宽松行为:

SimpleDateFormat format = new SimpleDateFormat("MM/yyyy");
format.setLenient(false); // not lenient

这会为无效输入引发ParseException,例如00/200013/2000

但是现在我们有更好的API。从Java 8开始,有一个new date/time API,对于版本< = 7,有一个nice backport。在此API中,默认情况下格式化程序不宽松:

DateTimeFormatter fmt = DateTimeFormatter.ofPattern("MM/yyyy");
YearMonth.parse("00/2000", fmt); // exception