我正在尝试用java比较两个日期。虽然下面的代码运行良好,但我想处理输入日期的日期格式可能发生一些更改的情况。
例如,在下面的代码中,两个日期的日期格式为yyyy/mm/dd hh:mm:ss am。但有时在输入日期中会发现一些额外的空白/换行符,这会导致异常。
java.text.ParseException: Unparseable date: "02/14/2013
07:00:00 AM"
以下是我试图执行的代码。
try
{
Date date1 = (Date)DATE_FORMAT_yyyy_mm_dd_hh_mm_ss.parse(slaTime); // usually the data comes as 2013/02/03 09:09:09 AM
Date date2 = (Date)DATE_FORMAT_yyyy_mm_dd_hh_mm_ss.parse(actualTime);// usually the data comes as 2013/02/03 09:06:09 AM
// a error occurs
if(date1.before(date2))
{
return "True";
}
else
{
return "False";
}
}
catch (ParseException e)
{
e.printStackTrace();
}
如何处理?
最简单的解决方案之一是在解析日期之前,从字符串版本中删除所有空白。更改日期格式,使其不包含任何空格(yyyy/MM/ddhh:MM:ssaaa),并使用此方法解析删除的字符串。
final DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/ddhh:mm:ssaaa");
final String dateStr = "02/14/2013 07:00:00" +
"n AM";
Date failingDate = dateFormat.parse(dateStr);
Date passingDate = dateFormat.parse(dateStr.replaceAll("\s",""));
对于年中的月份,使用M而不是M
正确的日期格式应为yyyy/MM/dd hh:mm:ss aaa
。如果有任何额外的空格或新行,那么你必须删除它。否则,它将无法解析你的字符串,你应该与格式完全匹配。
我建议你删除所有空格和换行符,然后解析它。
您可以在没有空格的地方使用-yyyy/MM/ddhh:mm:ssaaa
这样的格式。并将所有空格和换行符替换为空字符串。
Date date = new SimpleDateFormat("yyyy/MM/ddhh:mm:ssaaa").parse("2013/02/1407:00:00AM");
而你实际的代码可能会像-
dateString = dateString.replaceAll("\s","");
SimpleDateFormat("yyyy/MM/ddhh:mm:ssaaa").parse(dateString);