Scala Slick 3.0隐式映射java8 OffsetDateTime和Timestamp
首先是如果我想将带有时区的日期时间映射到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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |