Java中的有效日期格式检查

Java中的有效日期格式检查,java,simpledateformat,Java,Simpledateformat,当我执行以下代码时,即使我提供的日期不正确(2010-55-04),我也会得到一个“True”。有人能解释一下为什么会这样吗 package basic; import java.text.ParseException; import java.text.SimpleDateFormat; public class VerifyIfStrngIsValidDate { public static boolean checkdate(String dt1) {

当我执行以下代码时,即使我提供的日期不正确(2010-55-04),我也会得到一个“True”。有人能解释一下为什么会这样吗

package basic;

import java.text.ParseException;
import java.text.SimpleDateFormat;

public class VerifyIfStrngIsValidDate {

    public static boolean checkdate(String dt1)
    {
        SimpleDateFormat df1=new SimpleDateFormat("yyyy-mm-dd");
        System.out.println(df1.toPattern());
        df1.setLenient(false);
        try {
            df1.parse(dt1);
        } catch (ParseException e) {

            return false;
        }
        return true;
    }

    public static void main(String[] args) {

        boolean res;
        res=checkdate("2010-55-04");
        System.out.println(res);
    }

}

您对年-月日期使用了错误的格式掩码。使用
M
数月,而不是
M
,即分钟:

SimpleDateFormat df1 = new SimpleDateFormat("yyyy-MM-dd");
您将看到下面的演示在进行此更改后失败

请注意,根据,您设置的掩码不正确

y是年
m是分钟
d是月日
。因此,55是有效的。您应该将
mm
更改为
mm
,以解决此问题


SimpleDateFormat df1=新的SimpleDateFormat(“yyyy-MM-dd”)

您的格式错误<代码>毫米
为分钟。你的意思是说几个月,因为55分钟是有效的。改为每月尝试
MM
。重复@Elliot,Andreas,谢谢你的捕获!使用
java.time.LocalDate.parse(“2010-55-04”)
。不需要显式格式化程序,因此不可能出错。由于月份值超出范围,它会抛出异常。对于这样一个明显重复的问题,提供一个原始的链接不是比给出一个新的答案更好吗?我认为这将有助于我们将所有信息保存在一个地方,以造福于所有人。@OleV.V。我同意。事实上,我甚至没有想到将此标记为重复,但是的,可能还有几十个其他SDF问题可用于解决OP。