首先是如果我想将带时区的datetime映射到Slick,应该使用哪个类OffsetDateTime
或ZonedDateTime
?至于Joda,我们只能使用DateTime
。
我如何编写一些隐式在Slick表映射的java8ZonedDateTime
和sql之间转换Timestamp
?
使用jodaDateTime
包含时区信息似乎很简单。但是,一旦切换到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
列,而不是aTimestamp
以便它可以与任何数据库一起使用。
也就是说,您需要一个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
之间的区别OffsetDateTime和ZonedDateTime通过回答涵盖什么的Java 8 ZonedDateTime和OffsetDateTime之间的区别?,因此在此不再赘述。
但是,您需要阅读该内容,以确定简短答案是否符合您的情况。
如果您使用Postgres,则可以通过slick -pg项目支持java.time。我没有机会自己使用它,但是显然值得调查这是否是您正在使用的数据库。参见例如“ date2”附加组件的测试套件。
令人高兴的消息是,在Slick中有一个活跃的请求请求来添加对java.time数据类型的支持。您可以监视票证的进度,该票证当前计划用于Slick 3.2。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句