Как преобразовать LocalDate в SQL Date Java?

101

Как преобразовать LocalDate в java.sql.Date?

Попытка:

Record r = new Record();
LocalDate date = new Date(1967, 06, 22);
r.setDateOfBirth(new Date(date));

Это не удается (не компилируется), и все, что я могу найти, - это материал времени Joda.

Я использую Java 8

Gemtastic
источник
возможный дубликат Convert между LocalDate и sql.Date
assylias
2
@assylias Чем ответ на связанный вопрос лучше приведенных здесь? Другой вопрос следует закрыть как дубликат, а не наоборот.
Призрак Мадары
1
@SecondRikudo дубликат показывает, как преобразовать LocalDate в Date И наоборот, и поэтому кажется более общим.
assylias

Ответы:

177

Ответ действительно прост;

import java.sql.Date;
...
LocalDate locald = LocalDate.of(1967, 06, 22);
Date date = Date.valueOf(locald); // Magic happens here!
r.setDateOfBirth(date);

Если вы хотите преобразовать его наоборот, сделайте это так:

Date date = r.getDate();
LocalDate localD = date.toLocalDate();

r- это запись, которую вы используете в JOOQ, и .getDate()метод получения даты из вашей записи; скажем, у вас есть столбец даты с именем date_of_birth, тогда должен быть вызван ваш метод get getDateOfBirth().

Gemtastic
источник
4
Это «ужасный взлом», согласно java.time. * Автор: stackoverflow.com/questions/33066904/…
Дерик
15
Вы ссылаетесь на вопросы, java.util.Date НЕ относящиеся к java.sql.Dateэтому Вопросу.
Gemtastic
0

Если вам нужна текущая дата:

Date date = Date.valueOf(LocalDate.now());

Если вам нужна конкретная дата:

Date date = Date.valueOf(LocalDate.of(1967, 06, 22));
Ричард К.
источник
1
Это быстрее только в том случае, если вам нужен текущий момент, если вам нужна конкретная дата, как может быть, когда вы имеете дело с чьей-то датой рождения, это вообще не сработает.
Gemtastic
Да, это для вставки текущей даты, например, когда вы создаете объект и хотите сохранить дату создания.
RichardK
Это важно отметить, поскольку исходный вопрос касается создания определенной даты. Это на заметку для всех копипастеров. Вы МОЖЕТЕ указать один правильный ответ, Date date = Date.valueOf(LocalDate.of(1967, 06, 22));если хотите сделать это «быстрее».
Gemtastic
-1

Вы пробовали использовать метод toDate () LocalDate?

Как в:

Record r = new Record();
LocalDate date = new Date(1967, 06, 22);
r.setDateOfBirth(date.toDate());

В общем, лучше указать, почему это не удается, а не просто говорить «это не удается».

юхист
источник
Честно говоря, я разместил вопрос только для того, чтобы опубликовать свой ответ, чтобы вы могли найти его, когда будете гуглить. Мне пришлось разобраться в этом самостоятельно, потому что у Goodle не было этого вопроса или ответа.
Gemtastic
6
Что ж, теперь у вас есть два ответа, и чем больше, тем лучше. Я не думаю, что есть что-то плохое в том, чтобы отвечать на свои собственные сообщения.
juhist
Я надеюсь, что это поможет кому-то на моем месте в будущем.
Gemtastic
2
ОП написала: «[…] все, что я могу найти, - это время Джоды. Я не использую Java 8 ». Однако ваш ответ - это просто больше вещей Joda вместо ответа Java 8.
Майкл Пифель
1
LocalDate.toDate () существует только в версии LocalDate для Joda, но не в версии стандартной библиотеки.
Rörd 08