使用预期模式检查日期及其图案

时间:2013-04-17 09:31:56

标签: java date datetimeoffset

我有一个日期,它是字符串中的假设模式。

//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;
}

3 个答案:

答案 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";