2017-07-14 161 views

回答

8

LocalDateTimejava.sql.Date之間沒有直接關係,因爲前者是 - 時間戳,後者是 - 日期。

有,然而,LocalDatejava.sql.Date和轉換之間的關係是可以做到這樣的:

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

這對於任何給定的LocalDateTime爲您提供了以下代碼:

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

@M. Prokhorov's answer is correct ,我只想補充幾點。

A java.sql.Date只保留日,月和年的值。 時間值(小時,分鐘,秒和毫秒)are all set to zero。所以,在將LocalDateTime轉換爲java.sql.Date時,這些字段會丟失。

如果你做一個單向轉換,並且不介意丟失這些領域,那麼它的確定做到這一點:

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

但是,如果你想以後恢復原來LocalDateTime,它的更好保存時間字段separetely,這樣你就可以恢復它:

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

此答案必須是此問題的正確答案+1。 –

0

將從LocalDateTime到java.sql.Date - 保留一部分時間

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

java.sql.Date基本上是一個從1970年1月1日00:00:00 GMT開始經過毫秒的包裝,因此此轉換不會保留LocalDateTime中的時區信息。

相關問題