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

时间:2015-06-01 13:19:28

标签: java 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上知道无效日期?
有什么建议吗?

3 个答案:

答案 0 :(得分: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
}

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

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

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