加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala Slick 3.0隐式映射java8 OffsetDateTime和Timestamp

发布时间:2020-12-16 19:11:42 所属栏目:安全 来源:网络整理
导读:首先是如果我想将带有时区的日期时间映射到Slick,我应该使用OffsetDateTime还是ZonedDateTime?至于Joda,我们只能使用DateTime. 我怎么能写一些隐式的转换java8 ZonedDateTime和Sql Timestamp for Slick表映射? 使用joda DateTime来包含时区信息似乎非常简
首先是如果我想将带有时区的日期时间映射到Slick,我应该使用OffsetDateTime还是ZonedDateTime?至于Joda,我们只能使用DateTime.

我怎么能写一些隐式的转换java8 ZonedDateTime和Sql Timestamp for 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
  )

不太确定我可以用ZonedDateTime或OffsetDateTime写类似的东西吗?

解决方法

简答

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

也就是说,您需要MappedColumnType.base [OffsetDateTime,String].您可以使用toString和OffsetDateTime.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

更长的答案

0700和ZonedDateTime之间的差异由What’s the difference between java 8 ZonedDateTime and OffsetDateTime?的答案涵盖,所以我在此不再重复.

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

如果您通过slick-pg项目使用Postgres,there’s support for java.time.我自己没有机会使用它,但显然值得调查一下,如果这是你正在使用的数据库.例如,参见the test suite的“date2”附加组件.

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读