LocalDate'i SQL Date Java'ya nasıl dönüştürebilirim?


101

LocalDate'i a'ya nasıl dönüştürebilirim java.sql.Date?

Girişim:

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

Bu başarısız oluyor (derlenmeyecek) ve tek bulabildiğim Joda time şeyler.

Java 8 kullanıyorum



2
@assylias Bağlantılı sorunun cevabı burada verilenlerden nasıl daha iyi? Diğer soru bunun bir kopyası olarak kapatılmalıdır, tersi değil.
Madara'nın Hayaleti

1
@SecondRikudo yinelenen, LocalDate'ten Date'e VE tam tersi nasıl dönüştürüleceğini gösterir ve bu nedenle daha genel görünüyor.
assylias

Yanıtlar:


177

Cevap gerçekten çok basit;

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

Tersine çevirmek isterseniz, bunu şu şekilde yaparsınız:

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

rJOOQ'da kullandığınız kayıttır ve .getDate()kayıtlarınızdan tarihi çıkarmak için bir yöntemdir; date_of_birth adında bir tarih sütununuz olduğunu varsayalım, o zaman get yönteminiz çağrılmalıdır getDateOfBirth().


4
Bu, java.time'a göre "korkunç bir hack". * Yazar: stackoverflow.com/questions/33066904/…
Dherik

15
Bu Soru ile ilgili java.util.Date NOT java.sql.Date ile ilgili sorulara atıfta bulunuyorsunuz .
Gemtastic

0

Güncel tarihi istiyorsanız:

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

Belirli bir tarih istiyorsanız:

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

1
Bu, yalnızca o anı istiyorsanız daha hızlıdır, belirli bir tarih istiyorsanız, birinin doğum tarihiyle uğraşırken olabileceği gibi, bu hiç işe yaramayacaktır.
Gemtastic

Evet, örneğin bir nesne oluşturduğunuzda ve oluşturma tarihini sürdürmek istediğinizde geçerli tarihi eklemek içindir.
RichardK

Asıl soru tamamen belirli bir tarih oluşturmakla ilgili olduğu için not edilmesi önemlidir. Bu, dışarıdaki tüm kopyalayıp yapıştırıcılar için bir not. Eğer Date date = Date.valueOf(LocalDate.of(1967, 06, 22));"daha hızlı" yapmak istiyorsanız , doğru yanıtı on line CAN .
Gemtastic

-1

LocalDate'in toDate () yöntemini kullanmayı denediniz mi?

De olduğu gibi:

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

Genel olarak, sadece "başarısız olur" demek yerine, nasıl başarısız olacağını belirtmek iyi bir fikirdir .


Dürüst olmak gerekirse, google'da bulabilmeniz için soruyu yalnızca cevabımı göndermek için gönderdim. Kendi başıma anlamalıydım çünkü bu soruya veya cevaba Goodle'ın sahip olmadığı.
Gemtastic

6
Pekala, şimdi iki cevabınız var, o kadar çok neşe. Kendi gönderilerinize cevap vermenin yanlış olduğunu düşünmüyorum.
juhist

Umarım gelecekte benim yerimdeki birine yardımcı olur.
Gemtastic

2
OP, “[…] tek bulabildiğim Joda zamanı şeyler. Java 8'den kurtuluyorum ”. Ancak cevabınız, Java 8 cevabı yerine sadece daha fazla Joda meselesi.
Michael Piefel

1
LocalDate.toDate (), standart kitaplık sürümünde değil, yalnızca LocalDate'in Joda sürümünde bulunur.
Rörd
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.