如何区分数据输入是 (a) 无效日期还是 (b) 无效格式?
我有以下代码用于处理文本文件中的日期输入。
public boolean dateIsValid(String date) {
DateFormat formatter = new SimpleDateFormat("MM/dd/yyyy");
formatter.setLenient(false);
try {
Date dateParsed = (Date) formatter.parse(date);
} catch (ParseException e) {
e.printStackTrace();
}
return false;
}
我的一切都如我所愿。我遇到的唯一问题是我无法区分抛出的不同解析异常。例如:
if String date = 18/10/2012 --> java.text.ParseException: Unparseable date: "18/10/2012"
if String date = 2-12-2001 --> java.text.ParseException: Unparseable date: "2-12-2001"
如您所见,两种错误的格式都会引发相同的错误。我怎样才能区分它们以便以不同的方式处理它们?
编辑
更准确地说,对于日期 18/10/2012,我应该抛出无效日期错误,对于日期 2-12-2001,我需要抛出无效格式异常。我不需要处理不同的格式。我只需要一种方法来为这两种不同的情况获取不同的异常。
最佳答案
问题似乎出在这一行
DateFormat formatter = new SimpleDateFormat("MM/dd/yyyy");
对于第一个错误,看起来日期在前,月份在后,所以它应该是这样的
DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
第二个错误显示提供的日期格式不正确,因为它包含 -
而您期望的格式包含 /
ie like
DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");
如果你想处理不同的格式,那么试试这样:
String[] formatDates= {"MM/DD/yyyy", "dd/MM/yyyy", "MM-dd-yyyy","dd-MM-yyyy"};
Date tryParse(String dateString)
{
for (String formatDate: formatDates)
{
try
{
return new SimpleDateFormat(formatDate).parse(dateString);
}
catch (ParseException e) {}
}
return null;
}
关于Java 无法解析的日期格式差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25751917/