防止在 jdk6 中将无效日期转换为下个月的日期?

Prevent invalid date from getting converted into date of next month in jdk6?

考虑片段:

String dateStr = "Mon Jan 32 00:00:00 IST 2015";    // 32 Jan 2015

DateFormat formatter = new SimpleDateFormat("E MMM dd HH:mm:ss Z yyyy");
DateFormat ddMMyyyy = new SimpleDateFormat("dd.MM.yyyy");
System.out.println(ddMMyyyy.format(formatter.parse(dateStr)));

给我的输出为

01.02.2015     //   Ist February 2015

我希望阻止这种情况,让用户知道 UI 这是一个无效日期?
有什么建议吗?

您的 SimpleDateFormat 的选项 setLenient() 就是您要找的。

将 isLenient 设置为 false 后,它将只接受正确格式的日期,并在其他情况下抛出 ParseException。

String dateStr = "Mon Jan 32 00:00:00 IST 2015";    // 32 Jan 2015

DateFormat formatter = new SimpleDateFormat("E MMM dd HH:mm:ss Z yyyy");
formatter.setLenient(false);
DateFormat ddMMyyyy = new SimpleDateFormat("dd.MM.yyyy");
try {
    System.out.println(ddMMyyyy.format(formatter.parse(dateStr)));
} catch (ParseException e) {
    // Your date is invalid
}

您可以使用 DateFormat.setLenient(boolean) 到(来自 Javadoc)严格解析,输入必须匹配此对象的格式。

DateFormat ddMMyyyy = new SimpleDateFormat("dd.MM.yyyy");
ddMMyyyy.setLenient(false);

设置日期格式器不要太宽松...

DateFormat formatter = new SimpleDateFormat("E MMM dd HH:mm:ss Z yyyy");
formatter.setLenient(false);