1

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

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

3 回答 3

2

我认为您需要同时使用正则表达式和 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;
}
于 2013-04-17T09:42:47.537 回答
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字母代表第二个字符串没有的毫秒数。请参阅 API

于 2013-04-17T09:36:32.577 回答
1

来自SimpleDateFormat.parse()Java 文档:

...解析不一定使用直到字符串末尾的所有字符...

这意味着如果您的日期比模式长,它仍然会产生一个有效的Date实例。反过来(例如您的第二个示例)该模式比给定的日期字符串更长(更详细),因此它不会产生Date. 将其用于第二个示例:

String pattern = "yyyy-MM-dd hh:mm:ss";
于 2013-04-17T09:40:47.013 回答