【发布时间】:2017-08-30 05:09:27
【问题描述】:
我正在处理一个 Scala 项目,我需要将 OffsetDateTime 类型映射到 SQL Timestamp 类型。在 DB 中,我想要 UTC 时间。
从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,需要适应实际时区)。
为什么?我做错了什么?
【问题讨论】: