2017-07-14 41 views

Odpowiedz

8

Brak bezpośredniej korelacji między LocalDateTime i java.sql.Date, ponieważ poprzednia jest znacznikiem czasu, a druga to data.

Nie jest jednak relacja między LocalDate i java.sql.Date i konwersji można zrobić tak:

LocalDate date = //your local date 
java.sql.Date sqlDate = java.sql.Date.valueOf(date) 

który dla danej LocalDateTime daje następujący kod:

LocalDateTime dateTime = // your ldt 
java.sql.Date sqlDate = java.sql.Date.valueOf(dateTime.toLocalDate()); 
11

@M. Prokhorov's answer is correct , Chcę tylko dodać kilka punktów.

A java.sql.Date przechowuje tylko wartości dnia, miesiąca i roku. Wartości czasu (godzina, minuta, sekundy i milisekundy) are all set to zero. Tak więc, po konwersji LocalDateTime na java.sql.Date, te pola zostaną utracone.

Jeśli robisz jednokierunkową konwersję i nie przeszkadza tracąc te pola, to jest ok, aby to zrobić:

LocalDateTime dt = // LocalDateTime value 
// convert to Date (time information is lost) 
java.sql.Date date = java.sql.Date.valueOf(dt.toLocalDate()); 

Ale jeśli chcesz, aby przywrócić oryginalny LocalDateTime później, lepiej aby zapisać separetely pola czasu, dzięki czemu można go odzyskać:

LocalDateTime dt = // your LocalDateTime 
// save time information (hour, minute, seconds, fraction of seconds) 
LocalTime savedTime = dt.toLocalTime(); 
// convert to Date (time information is lost) 
java.sql.Date date = java.sql.Date.valueOf(dt.toLocalDate()); 

// retrieve back the LocalDate (only day/month/year) 
LocalDate localDate = date.toLocalDate(); 
// retrieve the LocalDateTime, with the original time values 
LocalDateTime ldt = localDate.atTime(savedTime); 
+1

Ta odpowiedź musi być poprawną odpowiedzią na pytanie +1. –

0

Konwersja z LocalDateTime do java.sql.Date - zachowując part Time

LocalDateTime dt = // your LocalDateTime 
long epochMillis = dt.atZone(ZoneOffset.UTC).toInstant().toEpochMilli() 
java.sql.Date date = new java.sql.Date(epochMillis); 

Urządzenie jest zasadniczo opakowaniem dla milisekund, które minęły od 1 stycznia 1970 00: 00: 00.000 GMT, dlatego ta konwersja nie zachowuje informacji o strefie czasowej z LocalDateTime.