我有一个日期,它是字符串中的假设模式。
//True
String date ="2012-10-12 12:01:10.10.150";
String pattern = "yyyy-MM-dd hh:mm:ss.SSS";
//False
String date ="2012-10-12 12:01:10.150";
String pattern = "yyyy-MM-dd hh:mm:ss";
现在,我想知道日期变量是否具有满足字符串中给定模式的正确日期。在上面的示例中,我显示的是True / False是预期的结果。
我尝试过使用SimpleDateFormat(如果它抛出ParseException),但它不适用于第二个例子。
public boolean isValidDate(String date, String pattern) {
if (date == null)
return false;
SimpleDateFormat dateFormat = new SimpleDateFormat(pattern);
try {
dateFormat.parse(date.trim());
} catch (ParseException pe) {
return false;
}
return true;
}
答案 0 :(得分:3)
我认为你需要使用正则表达式和SimpleDateFormat来实现你想要的东西
boolean validate(String date, String pattern) throws ParseException {
String regex = pattern.replaceAll("\\w", "\\\\d").replace(".", "\\.");
if (!date.matches(regex)) {
return false;
}
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
sdf.setLenient(false);
try {
sdf.parse(date);
} catch (Exception e) {
return false;
}
return true;
}
答案 1 :(得分:1)
使用yyyy-MM-dd hh:mm:ss
作为第二个日期的模式。
String date = "2012-10-12 12:01:10";
String pattern = "yyyy-MM-dd hh:mm:ss";
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
Date parse = sdf.parse(date);
大写S
代表你的第二个字符串没有的毫秒数。 See the API。
答案 2 :(得分:1)
来自SimpleDateFormat.parse()
Java doc:
...解析不一定使用所有字符直到结束 串...
这意味着如果您的日期比模式更长,它仍将生成有效的Date
实例。反过来(例如你的第二个例子)模式比给定的日期字符串更长(更详细),因此它不会产生Date
。请使用此代替第二个示例:
String pattern = "yyyy-MM-dd hh:mm:ss";