Java解析部分日期

时间:2012-06-21 15:38:16

标签: java date locale

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

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

有没有办法做到这一点?目前,SimpleDateFormat会抛出异常。

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:2)

使用2个不同的SimpleDateFormat个对象,每个对象具有不同的日期格式,并使用第一个。如果抛出了解析异常,请使用另一个异常。

最佳解决方案恕我直言,您首先使用正则表达式检查字符串,以便了解要使用的解析格式。也许你想在正则表达式中使用分组并自己形成日期(例如使用Calendar),而不是至少两次解析字符串(一个是正则表达式,一个是DateFormat)。

答案 2 :(得分: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);
}