Преобразование строковой даты в формат даты sql в Java

Я бы хотел добиться ниже:

У меня дата в строковом формате, например «2015-05-12 15:15:24», Я хотел бы преобразовать его в дату sql в формате «дд-МММ-гг». Однако это не работает. ниже фрагмент кода:

    String rawDate = "2015-05-12 15:15:24";

    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    Date date =format.parse(rawDate);
    Date sqlDate = new java.sql.Date(date.getTime());

    SimpleDateFormat changedFormat = new SimpleDateFormat("dd-MMM-yy");
    Date date2=changedFormat.parse(changedFormat.format(sqlDate));
    Date sqlDate2 = new java.sql.Date(date2.getTime());

    System.out.println("sqlDate : "+sqlDate +"  ::::::   Date2 : "+date2+"  :::: sqlDate2  "+sqlDate2);ow here is the Test : "+sqlDate2);

Результат программы:

sqlDate: 2015-05-12 :::::: Date2: Вт, 12 мая, 00:00:00 BST 2015 :::: sqlDate2 2015-05-12

Целью было получить дату в формате java.sql с 12 по 15 мая, но май не переводится в алфавитный месяц, а печатается как число.

я что-нибудь упускаю? любая помощь будет оценена.

К вашему сведению, ужасно неприятные старые классы даты и времени, такие как java.util.Date, java.util.Calendar и java.text.SimpleDateFormat, теперь являются наследие, вытесненными классами java.time, встроенными в Java 8 и новее. См. Руководство от Oracle.

Basil Bourque 25.09.2018 00:22

Проблема в том, что мне нужно использовать java.sql.Date в методе setDate, и он принимает java.sql.date в качестве второго параметра, то есть setDate (java.lang.String sCol, java.sql.Date d)

Rashid Khan 25.09.2018 00:26

Класс java.sql.Date был вытеснен несколько лет назад классом java.time.LocalDate. Используйте PreparedStatement::setObject для передачи LocalDate.

Basil Bourque 25.09.2018 00:33

См. Аналогичный вопрос, Вставка и выборка объектов java.time.LocalDate в / из базы данных SQL, такой как H2.

Basil Bourque 25.09.2018 00:46

Вопрос не имеет смысла. Вы хотите преобразовать строку в дату SQL, это нормально и несложно. Но затем вы продолжаете говорить «SQL date в формате <что угодно>». В SQL (и на самом деле в большинстве языков) DATE не является строковым типом данных и, в частности, не имеет формата. Каков ваш настоящий вопрос - вам нужно взять строку (которая должна представлять дату в определенном формате) и преобразовать ее в другой нить, представляющий ту же дату, но в другом формате?

mathguy 25.09.2018 01:17

@mathguy прав. Устаревший тип java.sql.Date всегда печатается в формате yyyy-MM-dd, но это не означает, что это имеет в этом формате, потому что у него вообще нет формата, и ваш PreparedStatement с радостью воспользуется этим. Бэзил Бурк тоже прав, вам определенно стоит отдать предпочтение LocalDate и yourPreparedStatement.setObject(4, yourLocalDate). О дате в формате см. Также хотите, чтобы текущая дата и время были в формате «дд / ММ / гггг ЧЧ: мм: сс.СС».

Ole V.V. 25.09.2018 08:07
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
7
2 035
2

Ответы 2

Вы вычислили это, но так и не распечатали:

String rawDate = "2015-05-12 15:15:24";

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = format.parse(rawDate);
java.sql.Date sqlDate = new java.sql.Date(date.getTime());

SimpleDateFormat changedFormat = new SimpleDateFormat("dd-MMM-yy");
System.out.println("Formatted Date: " + changedFormat.format(sqlDate));

Спасибо за ваш отзыв, однако мне нужна дата в формате даты sql, это возвращает желаемую дату в формате String.

Rashid Khan 24.09.2018 23:32

Что вы имеете в виду под «В формате даты SQL»? Пожалуйста, дополните. Класс java.sql.Date представляет дату (без времени), но не включает, я повторяю, никакого форматирования даты. Это работа форматтера.

The Impaler 24.09.2018 23:33

Я указал формат в SimpleDateFormat ("dd-MMM-yy"); но это, похоже, не действует. поскольку месяц печатается как число (например, 05) вместо алфавита (например, май), я хочу добиться того, чтобы он возвращал дату в формате, например. 12 мая 18 в переменной даты java sql.

Rashid Khan 24.09.2018 23:42

@RashidKhan - вы, кажется, ужасно запутались между "типом данных" и "форматом". ДАТА и СТРОКА - это типы данных, не существует таких понятий, как «формат даты» и «строковый формат». И у даты нет формата; «формат» применяет Только к строковым представлениям дат, а не к самим датам.

mathguy 25.09.2018 01:20

В вашем коде есть дата в желаемом формате, но вы используете дату другого типа объекта.

измените это:

Date date2=changedFormat.parse(changedFormat.format(sqlDate));
Date sqlDate2 = new java.sql.Date(date2.getTime());

на это: String dateformat =(changedFormat.format(sqlDate));

вы можете передать значение из строки в дату вашего объекта. но если вы напечатаете дату var, вы не напечатаете в желаемом формате, потому что:

Дата не хранит в себе какой-либо формат.

Спасибо, Могу ли я передать точную рассчитанную дату в переменной даты java sql?

Rashid Khan 24.09.2018 23:43

Да, вы можете пройти, но если вы напечатаете sql date var, вы напечатаете в формате «дд-ММ-гг», а не «дд-МММ-гг»

Ivan Fontalvo 25.09.2018 00:04

Другие вопросы по теме