Como converter LocalDate para SQL Date Java?


96

Como faço para converter um LocalDate em um java.sql.Date?

Tentativa:

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

Isso falha (não compila) e tudo que posso encontrar é material de tempo Joda.

Estou usando Java 8



2
@assylias Como a resposta à pergunta vinculada é melhor do que as dadas aqui? A outra questão deve ser encerrada como uma duplicata desta, e não vice-versa.
— Madara's Ghost

1
@SecondRikudo a duplicata mostra como converter de LocalDate em Date E vice-versa e, portanto, parece mais geral.
— Assylias

Respostas:


169

A resposta é muito simples;

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

Se você quiser convertê-lo ao contrário, faça assim:

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

ré o registro que você está usando no JOOQ e .getDate()é o método para retirar a data de seu registro; digamos que você tenha uma coluna de data chamada date_of_birth, então seu método get deve ser chamado getDateOfBirth().


4
Este é um "corte horrível", de acordo com o java.time * Autor:. Stackoverflow.com/questions/33066904/...
— Dherik

14
Você está se referindo a perguntas sobre java.util.Date NÃO do java.sql.Date qual esta pergunta se refere.
— Gemtastic

0

Se você quiser a data atual:

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

Se você quiser uma data específica:

Date date = Date.valueOf(LocalDate.of(1967, 06, 22));

1
Isso só é mais rápido se você quiser o momento atual, se quiser uma data específica, como pode ser o caso quando você está lidando com a data de nascimento de alguém, isso não vai funcionar de jeito nenhum.
— Gemtastic

Sim, é para inserir a data atual, por exemplo quando você cria um objeto e deseja persistir a data de criação.
— RichardK

O que é importante observar, pois a pergunta original é sobre como criar uma data específica. É uma nota para todos os copiadores por aí. Você PODE oneline a resposta correta com Date date = Date.valueOf(LocalDate.of(1967, 06, 22));se quiser fazê-lo "mais rápido".
— Gemtastic

-1

Você já tentou usar o método toDate () de LocalDate?

Como em:

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

Em geral, é uma boa ideia especificar como ele falha em vez de apenas dizer "falha".


Para ser honesto, eu só postei a pergunta para postar minha resposta para que você possa encontrá-la no google. Eu tive que descobrir por conta própria porque Goodle não tinha essa pergunta ou resposta.
— Gemtastic de

6
Bem, agora você tem duas respostas então, quanto mais, melhor. Não acho que haja algo de errado em responder suas próprias postagens.
— 2015

Espero que ajude alguém em meu lugar no futuro.
— Gemtastic de

2
O OP escreveu “[...] tudo o que posso encontrar são coisas do tempo Joda. Estou removendo o Java 8 ”. Sua resposta, entretanto, é apenas mais coisas do Joda em vez de uma resposta do Java 8.
— Michael Piefel

1
LocalDate.toDate () existe apenas na versão Joda de LocalDate, não na versão da biblioteca padrão.
— Rörd
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.