防止在 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);
考虑片段:
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);