当前位置:  开发笔记 > 编程语言 > 正文

Scala Slick 3.0隐式映射java8 OffsetDateTime和Timestamp

如何解决《ScalaSlick3.0隐式映射java8OffsetDateTime和Timestamp》经验,为你挑选了1个好方法。

首先,如果我想将带有时区的日期时间映射到Slick,我应该使用哪个类OffsetDateTimeZonedDateTime?至于Joda,我们只能使用DateTime.

我怎么能写一些隐式的转换java8 ZonedDateTime和Sql 之间Timestamp的Slick表映射?

使用joda DateTime来包含时区信息似乎非常简单.但是一旦切换到Java8,不太确定我是否应该使用ZonedDateTime或者OffsetDateTime,因为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
  )

不太清楚,我可以用任何写类似ZonedDateTimeOffsetDateTime



1> Richard Dall..:
简答

从Slick 3.1开始,简短的回答是使用OffsetDateTime,但您需要将其映射到String列,而不是将其映射到Timestamp任何数据库.

也就是说,你需要一个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
更长的答案

之间的区别OffsetDateTime和ZonedDateTime通过回答涵盖什么的Java 8 ZonedDateTime和OffsetDateTime之间的区别?所以我在此不再重复.

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

如果你使用Postgres,那么通过slick -pg项目支持java.time.我自己没有机会使用它,但显然值得调查一下,如果这是你正在使用的数据库.例如,参见"date2"附加组件的测试套件.

更好的答案(或者,未来的答案!)

好消息是,在Slick中添加了对java.time数据类型的支持的主动拉取请求.您可以监控故障单上的进度,该进度当前是为Slick 3.2安排的.

推荐阅读
殉情放开那只小兔子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有