2015-01-19 7 views
0

나는 anorm을 사용하여 postgresql에 타임 스탬프 필드를 저장하려고합니다. (2.3.7 플레이) 스칼라 코드에서 날짜/시간 java.time.Instant의 예 (언젠가 변수)Java 8 날짜/시간 API를 사용하는 Anorm

DB.withConnection() { implicit c => 
    SQL("INSERT INTO t_table(some_time) values ({someTime})").on('someTime -> someTime) 
} 

로 저장하지만 anorm 지금 작동하지 않을 수 있습니다.

작동하게하는 가장 좋은 방법은 무엇입니까?

+0

이 https://github.com/playframework/anorm/pull/10 – cchantep

답변

2

나는 대부분의 사람들이 JodaTime을 사용하고 있다고 믿기 때문에 왜 실종되었는지 설명 할 수 있습니다. Anorm의 일부가 아닌 경우 자체 변환기를 작성할 수 있습니다.

이 안된하지만

import java.time.Instant 
import java.time.format.DateTimeFormatter 
import java.util.TimeZone 

import anorm._ 

object InstantAnormExtension { 
    val dateFormatGeneration = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss-Z") 

    implicit def rowToDateTime: Column[Instant] = Column.nonNull { (value, meta) => 
    val MetaDataItem(qualified, nullable, clazz) = meta 
    value match { 
     case ts: java.sql.Timestamp => Right(ts.toInstant) 
     case d: java.sql.Date => Right(d.toInstant) 
     case str: java.lang.String => Right(Instant.from(dateFormatGeneration.parse(str))) 
     case _ => Left(TypeDoesNotMatch("Cannot convert " + value + ":" + value.asInstanceOf[AnyRef].getClass)) 
    } 
    } 
    implicit val dateTimeToStatement = new ToStatement[Instant] { 
    def set(s: java.sql.PreparedStatement, index: Int, aValue: Instant): Unit = { 
     if(aValue == null) { 
     s.setTimestamp(index, null) 
     } else { 
     s.setTimestamp(index, java.sql.Timestamp.from(aValue)) 
     } 
    } 
    } 
} 
+0

네보기 아래처럼 보일 것이다. 자바 8은 점점 더 많은 사람들이 joda-time을 잊어 버리는 것처럼 보입니다. 전략적으로 현명하다. 하지만 그렇지 않을 수도 있습니다. log4j는 사용할 때까지 사용됩니다. – ses