我有一个以2011-12-12
之类的字符串格式输入的英语日期。
我需要将其转换为日期格式,所以尝试了:
String assignDates="2011-12-12";
DateFormat df = new SimpleDateFormat("YYYY-MM-dd");
Date dates = df.parse(assignDates);
cstmt.setDate(2,dates);
但是我需要将其设置为 cstmt.setDate(2,dates); ,但它在此行中向我显示错误,如下所示:
类型为PreparedStatement的setDate(int,java.sql.Date)方法 不适用于参数(int,java.util.Date)
完整代码为:
public String getConvertedDateToBs(String assignDates) {
try
{
DateFormat df = new SimpleDateFormat("YYYY-MM-dd");
System.out.println("yo ni chiryo"+assignDates);
conn = DriverManager.getConnection(dbProperties.getDatabaseUrl());
System.out.println("chiryoassignDatea");
CallableStatement cstmt = conn.prepareCall("{? = call PCFN_LIB_ETON(?)}");
cstmt.registerOutParameter(1,Types.VARCHAR);
//java.sql.Types.VARBINARY
Date dates = df.parse(assignDates);
cstmt.setDate(2,dates);
cstmt.executeUpdate();
dateInBs = cstmt.getString(1);
/*dateInBs = df.format(assignBsDate);*/
System.out.println(dateInBs);
}
catch (SQLException e)
{
System.err.println(e.getMessage());
}
return dateInAd;
}
答案 0 :(得分:2)
假设您至少使用的是JDBC 4.2版(您可能正在使用),它比您认为的(未经测试)容易得多,也更直接:
LocalDate date = LocalDate.parse(assignDates);
cstmt.setObject(2, date);
不需要DateFormat
/ SimpleDateFormat
,也不需要java.util.Date
或java.sql.Date
。这非常好,因为这些类存在设计问题,尤其是第一个类非常麻烦。所有这些旧类都被认为已经过时了。
请改用Java.time(现代Java日期和时间API)中的LocalDate
。现代化的API更好用。
我利用了这样一个事实:您的字符串2011-12-12
采用ISO 8601格式,现代日期和时间类将其解析(并打印)为默认格式,即没有任何格式显式格式化程序。