如何解决这个错误";字符串无法转换为日期"



你好,我正在尝试将用户的出生日期存储在数据库中,代码如下:

private void btnActionPerformed(java.awt.event.ActionEvent evt) {                                                 
String username = txtUserName.getText();
String password = txtPassword.getText();
String email = txtEmail.getText();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String birthdate = sdf.format(JDateChooser.getDate());      
Users user = new Users();
user.setUserName(cin);
user.setPassWord(firstName);
user.setEmail(email);
user.setBirthDate(birthdate);
try {        
int count = Users.getInstance().insert(user);
if(count == 1){
JOptionPane.showMessageDialog(null,"success");
reset();
}else{
JOptionPane.showMessageDialog(null,"Faild");
}
} catch (Exception ex) {
Logger.getLogger(AddNewPatient.class.getName()).log(Level.SEVERE, null, ex);
}
} 

我得到一个错误,说字符串不能转换为日期行";user.setBirthDate(出生日期("因为参数birthdate在封装中被指定为Date类型(setBirthDate(有什么方法可以解决这个问题吗?我是java编程的新手,我正在努力提高我的java技能。

如果返回Date:

JDateChooser.getDate()

您需要的是一个Date,然后不要将其转换为String。只需将其作为Date:

Date birthdate = JDateChooser.getDate();
// later...
user.setBirthDate(birthdate);

注意,您也可以删除这一行,因为您没有使用它声明的变量:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

通常,您希望尽可能多地保持数据类型的原始形式。除非有特定的需要将某个数据表示为字符串(将其显示给用户,通过某种序列化的API发送,等等(,否则只使用as-is数据,而不是将其转换为其他数据。

使用JDateChooser.getDate()获取日期后,您将立即将其转换为字符串:sdf.format(JDateChooser.getDate());

您应该将JDateChooser.getDate()返回的Date存储为实际的Date对象。

Date birthdate = JDateChooser.getDate();

然后你可以直接在你的其他功能中使用它:

user.setBirthDate(birthdate);

如果您确实需要将日期作为字符串用于其他目的(可能显示给用户(,则可以将格式化的字符串版本存储在不同的变量中:

String birthdateString = sdf.format(birthdate);   

否则,如果不需要字符串版本,可以删除创建sdf的行。