从字符串到日期的转换在JAVA中不发生

时间:2019-01-22 05:02:58

标签: java date-parsing incompatibletypeerror java-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.setDate(2,dates); ,但它在此行中向我显示错误,如下所示:

  

类型为PreparedStatement的setDate(int,java.sql.Date)方法   不适用于参数(int,java.util.Date)

enter image description here

完整代码为:

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;
    }

1 个答案:

答案 0 :(得分:2)

假设您至少使用的是JDBC 4.2版(您可能正在使用),它比您认为的(未经测试)容易得多,也更直接:

        LocalDate date = LocalDate.parse(assignDates);
        cstmt.setObject(2, date);

不需要DateFormat / SimpleDateFormat,也不需要java.util.Datejava.sql.Date。这非常好,因为这些类存在设计问题,尤其是第一个类非常麻烦。所有这些旧类都被认为已经过时了。

请改用Java.time(现代Java日期和时间API)中的LocalDate。现代化的API更好用。

我利用了这样一个事实:您的字符串2011-12-12采用ISO 8601格式,现代日期和时间类将其解析(并打印)为默认格式,即没有任何格式显式格式化程序。