我想检查日期的模式为给定(yyyy-mm-dd hh:mm:ss)。 在下面的代码中,我想检查除yyyy-mm-dd hh:mm:ss以外的任何内容,如果其他内容多于或少,则应该为false。是否有更好的方法来检查模式,以便我不必单独检查日期的长度?
public class CheckNumber {
public static void main(String ...args){
CheckNumber cn1=new CheckNumber();
Boolean b=cn1.test("2011-10-12 08:29:56");
System.out.println(b);
}
public static boolean test (String s){
Pattern pattern = Pattern.compile("\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}");
Matcher matcher = pattern.matcher(s);
if (matcher.find()){
return true;
}
return false;
}
}
答案 0 :(得分:2)
使用matcher.matches()
代替matcher.find()
。这就是它的用途:检查字符串是否与模式完全匹配。您可以通过阅读the javadoc轻松找到这一点。
如果您需要检查它是否是有效日期,请使用SimpleDateFormat。要测试日期格式解析器是否已完全解析了您的字符串,请使用以ParsePosition作为参数的parse方法,并检查解析后的位置是否为String的长度。
答案 1 :(得分:2)
这取决于你的意思是“更好”。我会使用SimpleDatePattern
并尝试解析日期:这将检查格式和值范围(即1月32日将被排除,以及2月30日)。
E.g。
try {
DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
format.setLenient(false); // disable heuristics for improper dates
format.parse(s);
return true;
} catch (ParseException e) {
return false;
}
答案 2 :(得分:1)
您可以使用new SimpleDateFormat(yourFormat).parse(date)
。如果它返回值,则格式为OK,如果抛出ParseException,则格式错误。
我希望这能回答你的问题。
答案 3 :(得分:0)
如果您不想使用上面建议的SimpleDateFormat
解决方案并使用正则表达式。我建议如下:^([0-9]{4})-([0-1][0-9])-([0-3][0-9])\s([0-1][0-9]|[2][0-3]):([0-5][0-9]):([0-5][0-9])$
它很难看,但它会过滤比您当前使用的日期更多的无效日期。它也不匹配字符串:“fooo 2011-10-12 08:29:56 bar”(你的代码实际上会在这样的“日期”中返回true)。