我正在開發一個Scala項目,我需要將OffsetDateTime
類型映射到SQL Timestamp
類型。在數據庫我想有UTC時間。如何將java.sql.Timestamp轉換爲java.time.OffsetDateTime?
從OffsetDateTime
到Timestamp
轉化爲簡單的(提示從this question),它按預期工作:
import java.time._
import java.sql.Timestamp
val ofsdatetime = OffsetDateTime.now()
// ofsdatetime: java.time.OffsetDateTime = 2017-04-04T21:46:33.567+02:00
val tstamp = Timestamp.valueOf(ofsdatetime.atZoneSameInstant(ZoneOffset.UTC).toLocalDateTime())
// tstamp: java.sql.Timestamp = 2017-04-04 19:46:33.567
正如你所看到的,時區被刪除,時間戳爲兩個小時回來時(UTC) ,太棒了!
轉換回Timestamp
到OffsetDateTime
不能按預期工作:
OffsetDateTime.ofInstant(Instant.ofEpochMilli(tstamp.getTime), ZoneId.systemDefault())
// java.time.OffsetDateTime = 2017-04-04T19:46:33.567+02:00
時區已被添加到新創建的OffsetDateTime
,但時間是不正確的(它仍然是UTC,我需要它適應於實際的時區)。
爲什麼?我究竟做錯了什麼?