2015-01-19 3 views
0

Я пытаюсь сохранить поле timestamp в postgresql с помощью анома. В коде лестницы даты/время, занесенные в качестве экземпляра java.time.Instant (иногда переменный)Anorm с Java 8 API Дата/Время

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

Но anorm не может работать с ним сейчас (Play 2.3.7).

Каков наилучший способ заставить его работать?

+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

да. с java 8 теперь кажется, что все больше и больше людей забудут о джедай-времени. стратегически мудрым. но, возможно, нет. log4j до использования f.e. – ses

 Смежные вопросы

  • Нет связанных вопросов^_^