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.