2016-01-05 20 views
5

İlk olarak, saat dilimi ile Slick'e datetime eşlemek istiyorum, hangi sınıfı OffsetDateTime veya ZonedDateTime kullanmalıyım? Joda'ya gelince, sadece DateTime'u kullanabiliriz.Scala Slick 3.0, java8 OffsetDateTime ve Timestamp arasında örtük eşleme

Slick tablo eşlemesi için java8 ZonedDateTime ve Sql Timestamp arasında dönüştürmek için bazı örtülü bilgileri nasıl yazabilirim?

Bu zaman dilimi bilgileri içerecek şekilde joda DateTime kullanmak oldukça basit görünüyor. Ancak bir kez http://www.oracle.com/technetwork/articles/java/jf14-date-time-2125367.html OffsetDateTime kullanmak da anlaşılacağı gibi ben ZonedDateTime veya OffsetDateTime kullanması gerekip gerekmediğini oldukça emin değildi, Java8 geçin.

Geçerli kodum için sadece Java8 LocalDateTime kullanıyorum ve slick arasında eşlemek için aşağıdaki örtülü bilgileri yazarım. Ya ZonedDateTime veya OffsetDateTime kullanarak benzer yazabilir

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

oldukça emin değil misiniz?

cevap

9

Slick 3.1 itibariyle

Kısa Cevap, kısa cevap OffsetDateTime kullanmaktır, ancak herhangi bir veritabanı ile çalışmak için değil bir Timestamp bir String sütuna eşlemek gerekir. olduğu

, bir MappedColumnType.base[OffsetDateTime, String] gerekir.

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 

Daha Uzun

OffsetDateTime ve ZonedDateTime arasındaki fark What's the difference between java 8 ZonedDateTime and OffsetDateTime? cevap kaplıdır Cevap, dolayısıyla burada tekrarlamak olmaz: Sen dize dönüşüm için toString ve OffsetDateTime.parse kullanabilirsiniz. Ancak, kısa cevabın durumunuza uygun olup olmadığına karar vermek için bunu okumak istersiniz.

projesi aracılığıyla Postgres, there's support for java.time kullanırsanız. Kullanmak için şansım olmadı, ama kullanmakta olduğunuz veri tabanı eğer araştırmaya değmez. Bkz. "Date2" eklentisi için the test suite.

Daha İyi Cevap (veya, Gelecek Cevap!)

harika bir haber Slick içinde java.time veri türleri için destek eklemek için aktif bir çekme isteği var olmasıdır. Şu anda Slick 3.2 için planlanan ilerlemeyi on the ticket izleyebilirsiniz.

+0

Teşekkürler Richard, son cevap beklediğim şey :-) – ttt