Java 8 OffsetDateTime和Timestamp之间的Scala Slick 3.0隐式映射

ttt

首先是如果我想将带时区的datetime映射到Slick,应该使用哪个类OffsetDateTimeZonedDateTime至于Joda,我们只能使用DateTime

我如何编写一些隐式在Slick表映射的java8ZonedDateTime和sql之间转换Timestamp

使用jodaDateTime包含时区信息似乎很简单但是,一旦切换到Java8,就不太确定我是否应该使用ZonedDateTimeOffsetDateTime,因为http://www.oracle.com/technetwork/articles/java/jf14-date-time-2125367.html建议使用OffsetDateTime。

对于我当前的代码,我只使用Java8,LocalDateTime并且我编写了以下隐式映射以在光滑之间进行映射。

implicit val JavaLocalDateTimeMapper = MappedColumnType.base[LocalDateTime, Timestamp](
    l => Timestamp.valueOf(l),
    t => t.toLocalDateTime
  )

不太确定我是否可以使用ZonedDateTime编写类似内容OffsetDateTime

理查德·达拉威

简短答案

从Slick 3.1开始,简短的答案是使用OffsetDateTime,但是您需要将其映射到String列,而不是aTimestamp以便它可以与任何数据库一起使用。

也就是说,您需要一个MappedColumnType.base[OffsetDateTime, String]您可以使用toStringOffsetDateTime.parse进行字符串转换:

scala> import java.time._
import java.time._

scala> val paris = ZoneId.of("Europe/Paris")
paris: java.time.ZoneId = Europe/Paris

scala> OffsetDateTime.now(paris)
res0: java.time.OffsetDateTime = 2016-01-05T20:38:46.473+01:00

scala> OffsetDateTime.parse(res0.toString)
res2: java.time.OffsetDateTime = 2016-01-05T20:38:46.473+01:00

更长的答案

之间的区别OffsetDateTimeZonedDateTime通过回答涵盖什么的Java 8 ZonedDateTime和OffsetDateTime之间的区别?,因此在此不再赘述。

但是,您需要阅读该内容,以确定简短答案是否符合您的情况。

如果您使用Postgres,则可以通过slick -pg项目支持java.time我没有机会自己使用它,但是显然值得调查这是否是您正在使用的数据库。参见例如“ date2”附加组件的测试套件

更好的答案(或将来的答案!)

令人高兴的消息是,在Slick中有一个活跃的请求请求来添加对java.time数据类型的支持。您可以监视票证的进度,该票证当前计划用于Slick 3.2。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章