Java中的有效日期格式检查
当我执行以下代码时,即使我提供的日期不正确(2010-55-04),我也会得到一个“True”。有人能解释一下为什么会这样吗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) {
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。