使用SimpleDateFormat.parse(String)
要求格式中指定的所有字段都出现在输入字符串中。我想要的是一种以相同格式验证部分输入字符串的方法。
例如,Format="yyyy/MM/dd HH:mm:ss"
和Input="2012/01/01"
应匹配,并且时间应设置为零。
有没有办法做到这一点?目前,SimpleDateFormat
会抛出异常。
答案 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);
}