7

考虑一下片段:

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 上的日期无效?
有什么建议么?

4

3 回答 3

3

您的 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
}
于 2015-06-01T13:24:25.990 回答
2

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

DateFormat ddMMyyyy = new SimpleDateFormat("dd.MM.yyyy");
ddMMyyyy.setLenient(false);
于 2015-06-01T13:25:13.273 回答
1

将日期格式化程序设置为不宽大...

DateFormat formatter = new SimpleDateFormat("E MMM dd HH:mm:ss Z yyyy");
formatter.setLenient(false);
于 2015-06-01T13:26:23.727 回答