我正在开发一个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,我需要它适应于实际的时区)。
为什么?我究竟做错了什么?