java - setLenient(false) 让通过日期格式验证

标签 java simpledateformat

我正在尝试使用下面的代码验证日期格式

class Ideone
{
    public static void main (String[] args) throws java.lang.Exception
    {
    String dateFormat = "yyyy-MM-dd";
    String dateToValidate = "18-12-18";

    if(!isThisDateValid(dateToValidate,dateFormat)){
        System.out.println("Date is invalid");
    }
    else{
        System.out.println("Date is valid");
    }
    }


       public static boolean isThisDateValid(String dateToValidate, String dateFromat){

        if(dateToValidate == null){
            return false;
        }

        SimpleDateFormat sdf = new SimpleDateFormat(dateFromat);
        sdf.setLenient(false);

        try {
            Date date = sdf.parse(dateToValidate);

        } catch (ParseException e) {
            return false;
        }

        return true;
    }
}

但失败了就让它通过了。

此处提供测试代码:https://ideone.com/ryN7HO

有什么想法吗?

最佳答案

18 年是有效年份,SimpleDateFormat 不强制执行特定模式(并且不需要零填充值)。但是,您可以使用正则表达式添加对您的模式的检查。四位数字,一个破折号,两位数字,一个破折号和两位数字。就像,

if (!dateToValidate.matches("\\d{4}-\\d{2}-\\d{2}")) {
    return false;
}

注意:此代码不符合 Y10k 标准。

关于java - setLenient(false) 让通过日期格式验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49566571/

相关文章:

java - 包私有(private)类对不同源文件夹下的某些其他包(具有相同名称)可见

java - 下载图像并将其保存到 SD 卡中

java - WSDL 使用 SOAP 1.2 时生成 webservice 客户端

java - 将字符串解析为日期

java - 使用 SimpleDateFormat 解析日期

java - JSF 自定义日期转换器 - 线程安全吗?

java - Maven tomcat 插件不接受路径

java - 泛型类中私有(private)迭代器出现奇怪的输入错误

java - 如何在 Java 中使用 DateFormat 解析月份完整形式的字符串?

java - 转换 GMT 日期时间字符串