JAVA中未发生从字符串到日期的转换
我有字符串格式的英文日期,比如2011-12-12。 我需要将其转换为日期格式,因此我尝试:JAVA中未发生从字符串到日期的转换,java,date-parsing,incompatibletypeerror,date,Java,Date Parsing,Incompatibletypeerror,Date,我有字符串格式的英文日期,比如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.setDate2,dates;但它向我展示了这行中的错误
String assignDates="2011-12-12";
DateFormat df = new SimpleDateFormat("YYYY-MM-dd");
Date dates = df.parse(assignDates);
cstmt.setDate(2,dates);
但是我需要将它设置为cstmt.setDate2,dates;但它向我展示了这行中的错误,如下所示:
类型PreparedStatement中的方法setDateint,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;
}
假设您至少使用JDBC 4.2版(您可能正在使用),这比您认为未测试的要简单得多:
LocalDate date = LocalDate.parse(assignDates);
cstmt.setObject(2, date);
不需要DateFormat/SimpleDataFormat,也不需要java.util.Date或java.sql.Date。这是非常好的,因为这些类都有设计问题,特别是第一个类是出了名的麻烦。所有这些旧课程都被认为早已过时
而是使用java.time中的LocalDate,这是现代java日期和时间API。现代的API更易于使用
我利用了一个事实,即您的字符串2011-12-12采用ISO 8601格式,现代日期和时间类解析并打印为默认格式,也就是说,没有任何显式格式化程序。您的错误已经解释清楚了。setDate方法需要java.sql.Date类型。但是,您的日期是java.util.date type->change cstmt.setDate2,new java.sql.Datedates.getTimeImports有问题吗?java.sql.Date或java.util.Date首先验证格式说明符是您真正想要的-;其次,考虑使用JavaTimeAPI代替如何显示;第三,错误消息似乎很明显,当方法需要java.sql.Date时,您使用的是java.util.Date-您的类型错误不是您要求的,而是您想要的yyyy-MM-dd。Y与Y不同-它被添加到java中是为了找出不阅读Javadocs的人。实际上,最简单的方法是导入java.sql.Date,而不是java.util.Date。然后,您可以在字符串中写入Date.valueof,所有问题都将消失。如果您出于其他原因需要java.util.Date,但确实不需要,因为它现在已经过时了,您可以只编写java.sql.Date.valueOfyourString而不导入java.sql.Date。