Преобразование из строки в дату не происходит в JAVA - PullRequest
0 голосов
/ 22 января 2019

У меня английская дата в строковом формате, например 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, даты); , но это показывает мне ошибку вэта строка выглядит следующим образом:

Метод setDate (int, java.sql.Date) в типе PreparedStatement не применим для аргументов (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 голосов
/ 22 января 2019

Предполагая, что вы используете хотя бы JDBC версии 4.2 (которой вы, вероятно, являетесь), это намного проще и понятнее, чем вы думаете (не тестировалось):

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

Нет необходимости в DateFormat / SimpleDateFormat и нет необходимости в java.util.Date или java.sql.Date. Что очень хорошо, потому что у этих классов были проблемы с дизайном, особенно первые из них были проблематичными. Все эти старые классы считаются давно устаревшими.

Вместо этого используйте LocalDate из java.time, современного Java-API даты и времени. С современным API гораздо приятнее работать.

Я пользуюсь тем фактом, что ваша строка, 2011-12-12, имеет формат ISO 8601, формат, который современные классы даты и времени анализируют (и также печатают) как значения по умолчанию, то есть без какого-либо явного средства форматирования .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...