【问题标题】:Validating if given string is a date in Java [duplicate]验证给定字符串是否是Java中的日期[重复]
【发布时间】:2015-11-21 15:26:04
【问题描述】:

我通过 html 中的文本框获取字符串值。我想使用 if 条件验证该字符串,以查看给定的字符串是否为日期。

    if (matches ^\d\d\d\d((01|03|05|07|08|10|12)(30|31|[012]\d)|(04|06|09|11)(30|[012]\d)|02[012]\d)$)
    if (endsWith "0229")
         return true or false depending on the year being a leap year
    return true
return false

我喜欢通过谷歌搜索此代码,但包含错误且不成功。

请帮我解决这个问题。

【问题讨论】:

  • 尝试使用 DateFormat 解析字符串,如果它抛出解析异常,那么它不是有效输入
  • 这是不可能的。 “01/02/2015”是日期,但“2015 年 2 月 2 日”也是。有多种格式可以体面(且值得信赖)做到这一点。
  • 您的String 有一些标准或预定义的模式?
  • @JordiCastilla 是的,就像 2015-08-30
  • @hinata 检查我的答案,希望对您有所帮助

标签: java jsp date


【解决方案1】:

我想使用 if 条件验证该字符串以查看给定的 字符串是日期。

你最好试试解析。你可以使用org.apache.commons.lang3.time.DateUtils

例如:

String[] validFormats = new String[] {"dd.MM.yyyy", "dd.MM/yyyy" };
Date date = DateUtils.parseDate(validFormats);
//Throw ParseException if String is not parsable with given formats

请注意这里有一个限制,它只能在日期字符串为允许的格式之一时进行解析。如果您不想使用第三方库。您可以创建自己的方法并使用循环,如果您成功获取日期,则尝试一一解析返回日期。

【讨论】:

  • 甜美干净简单:)
【解决方案2】:

根据 cmets:

您的字符串有一些标准或预定义的模式?

是的,比如2015-08-30

所以,使用SimpleDateFormat::parse(String)

从字符串中解析文本以生成日期。

class MyDateUtils {
    public static boolean isValidDate(String curDate) {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        // don't allow dates out of range as 2015-18-33
        format.setLenient(false);  

        Date parsedDate = null;
        try {
            parsedDate = format.parse(curDate);
        } catch (ParseException e) {}

        return parsedDate == null ? false : true;
    }
}

执行:

MyDateUtils.isValidDate("2015-12-31"); // returns true
MyDateUtils.isValidDate("2015-18-31"); // returns false
MyDateUtils.isValidDate("2015/12/31"); // returns false

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-01
    • 2014-12-19
    相关资源
    最近更新 更多