如何轉換LocalDateTime
至java.sql.Date
在java-8?Java 8中的java.sql.Date的LocalDateTime?
我在互聯網上的搜索主要是給我Timestamp
相關的代碼或LocalDate
到java.sql.Date
。我正在尋找LocalDateTime
至java.sql.Date
。
如何轉換LocalDateTime
至java.sql.Date
在java-8?Java 8中的java.sql.Date的LocalDateTime?
我在互聯網上的搜索主要是給我Timestamp
相關的代碼或LocalDate
到java.sql.Date
。我正在尋找LocalDateTime
至java.sql.Date
。
LocalDateTime
和java.sql.Date
之間沒有直接關係,因爲前者是 - 時間戳,後者是 - 日期。
有,然而,LocalDate
和java.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());
@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);
將從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
中的時區信息。
此答案必須是此問題的正確答案+1。 –