如何检查输入的出生日期是否有效

mik*_*157 0 java validation date

用户在yyyy/mm/dd的jTextfield中输入他的出生日期,我想确保他正确地输入它并且它是一个真实的日期.到目前为止这是我的代码:

SimpleDateFormat df = new SimpleDateFormat("yyyy/mm/dd");  
Date testDate = null;

Birth = jTextField3.getText();

try{  
    testDate = df.parse(Birth);
} catch (ParseException e){ }      
if (!df.format(testDate).equals(Birth)){  
    JOptionPane.showMessageDialog(rootPane, "invalid date!!");
}
Run Code Online (Sandbox Code Playgroud)

我得到的错误是它说我不能java.sql.Date投入一个java.util.Date

Jon*_*eet 6

mm是分钟.MM是几个月:

SimpleDateFormat df = new SimpleDateFormat("yyyy/MM/dd");
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅文档.

您应该将其设置为严格(df.setLenient(false),然后您不需要尝试再次格式化结果 - 只需解析异常即可.

就个人而言,我会使用Joda Time来处理Java中的任何日期/时间 - 这是一个更好的API.

至于java.util.Datevs java.sql.Date- 您给我们的代码将完全使用java.util.Date.如果您已经拥有了java.sql.Date要保留的导入,那么您需要以下内容:

java.util.Date testDate = ...;
Run Code Online (Sandbox Code Playgroud)

虽然您不需要重新格式化它,但您可能根本不需要变量:

SimpleDateFormat df = new SimpleDateFormat("yyyy/MM/dd");
df.setLenient(false);
Date testDate = null;
boolean valid = false;
try {
    df.parse(jTextField3.getText());
    valid = true;
}
catch (ParseException e) { } // valid will still be false
if (!valid) {  
    JOptionPane.showMessageDialog(rootPane, "invalid date!!");
}
Run Code Online (Sandbox Code Playgroud)

(或者你可以在catch块中显示消息对话框,但是你不能轻易地else为成功案例提供一个条款...)