2

使用SimpleDateFormat.parse(String)要求格式中指定的所有字段都存在于输入字符串中。我想要的是某种针对相同格式验证部分输入字符串的方法。

例如,Format="yyyy/MM/dd HH:mm:ss"andInput="2012/01/01"应该匹配,并且一天中的时间应该设置为零。

有没有办法做到这一点?当前,SimpleDateFormat引发异常。

4

3 回答 3

5

试试DateUtils#parseDate(String, String[])Apache Utils 的。它将允许您传递一系列允许的格式,并尝试每种格式,直到合适为止。

于 2012-06-21T15:58:05.637 回答
2

使用 2 个不同的SimpleDateFormat对象,每个对象都有不同的日期格式,然后使用第一个。如果抛出解析异常,则使用另一个。

最好的解决方案恕我直言,您首先使用正则表达式检查字符串,以便知道要使用哪种解析格式。也可能您想在正则表达式中使用分组并自己形成日期(例如使用Calendar),而不是至少两次解析字符串(一次通过正则表达式,第二次通过DateFormat)。

于 2012-06-21T15:41:53.593 回答
0

这是实现m0skit0提出的解决方案的一种方法,使用多个SimpleDateFormat您可以使用try catch级联解析,例如:

SimpleDateFormat fullFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
SimpleDateFormat shortFormat = new SimpleDateFormat("yyyy/MM/dd");

String input="2012/01/01";
Date res;
try {
    res = fullFormat.parse(input);
} catch (ParseException e) {
    res = shortFormat.parse(input);
}
于 2012-06-21T15:59:52.050 回答