2016-01-05 9 views
5

まず、datetimeをタイムゾーンにマップする場合、どのクラスをOffsetDateTimeまたはZonedDateTimeにする必要がありますか? JodaについてはDateTimeしか使用できません。Scala Smick 3.0 java8のOffsetDateTimeとTimestampの間の暗黙のマッピング

どのように私はいくつかの暗黙のうちにjava8 ZonedDateTimeとSql TimestampをSlickテーブルマッピングの間で変換することができますか?

タイムゾーン情報を含むようにジョダDateTimeを使用するために非常に簡単そうです。しかし、一度http://www.oracle.com/technetwork/articles/java/jf14-date-time-2125367.htmlがOffsetDateTimeを使用することを示唆するように、私は、ZonedDateTimeまたはOffsetDateTimeを使用する必要があるかどうかをかなり確実ではない、Java8に切り替えます。私の現在のコードの場合

、私はちょうどJava8 LocalDateTimeを使用して、私は滑らかな間をマッピングする暗黙の次の書き込み。私はどちらかZonedDateTimeまたはOffsetDateTimeを使用して、同様の書き込みが可能

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

かなりわかりませんか?

答えて

9

スリック3.1のよう

短い答えは、短い答えはOffsetDateTimeを使用することですが、それは任意のデータベースで動作するためにあなたがいないTimestampString列にマップする必要があります。ある

、あなたは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との差はWhat's the difference between java 8 ZonedDateTime and OffsetDateTime?への答えで覆われているので、私はここでそれを繰り返すことはしません

回答。

ただし、あなたの状況に合わせて短い回答が一致するかどうかを確認することをお勧めします。

あなたはslick-pgプロジェクトを経由してのPostgres、there's support for java.timeを使用している場合。私はそれを自分で使う機会はありませんでしたが、それがあなたが使っているデータベースかどうか調べる価値があります。 "date2"アドオンについては、たとえばthe test suiteを参照してください。

良い答え(または、今後の回答!)

素晴らしいニュースはスリックでjava.timeデータタイプのサポートを追加するには、アクティブプル要求があるということです。現在、Slick 3.2にスケジュールされている進捗状況on the ticketを監視することができます。

+0

リチャードに感謝、最後の答えは私が期待したものです:-) – ttt

0

は私が今までリリースされたとは考えていないフォークがありましたが、それはJava8時のサポートを持っていた:

https://github.com/xavier-fernandez/slick

それは非常に安定だ、と私はPRODにHSQLDBとそれを使用してきました。および関連仕様/プルリクエスト:

https://github.com/slick/slick/pull/1349

あなたはコード生成を探しているなら、それは上記のフォークを使用して、あまりにも難しいことではありません、このポストはそれを行う方法を説明します

https://github.com/slick/slick/pull/1349#issuecomment-245566307

関連する問題