Подтвердить что ты не робот

Joda DateTime Field на Play Framework 2.0 Anorm

Я изучаю Play Framework, и рекомендуемый способ доступа к базе данных - использовать компонент сборки в составе anorm. Дело в том, что нет хорошей поддержки DateTime в анормах. Он все еще использует java.util.Date.

Можно ли использовать Joda DateTime или java.sql.Timestamp в анормах?

Если нет возможности использовать Joda или java.sql, можно ли добавить модуль для этого?

4b9b3361

Ответ 1

update: Поскольку play 2.3.7 теперь изначально поддерживается.

Я использую следующий фрагмент кода для работы с DateTime без проблем с Anorm.

import org.joda.time._
import org.joda.time.format._
import anorm._

object AnormExtension {


val dateFormatGeneration: DateTimeFormatter = DateTimeFormat.forPattern("yyyyMMddHHmmssSS");

implicit def rowToDateTime: Column[DateTime] = Column.nonNull { (value, meta) =>
    val MetaDataItem(qualified, nullable, clazz) = meta
    value match {
        case ts: java.sql.Timestamp => Right(new DateTime(ts.getTime))
        case d: java.sql.Date => Right(new DateTime(d.getTime))
        case str: java.lang.String => Right(dateFormatGeneration.parseDateTime(str))  
        case _ => Left(TypeDoesNotMatch("Cannot convert " + value + ":" + value.asInstanceOf[AnyRef].getClass) )
    }
}

implicit val dateTimeToStatement = new ToStatement[DateTime] {
    def set(s: java.sql.PreparedStatement, index: Int, aValue: DateTime): Unit = {
        s.setTimestamp(index, new java.sql.Timestamp(aValue.withMillisOfSecond(0).getMillis()) )
    }
}

}

Я думаю, что он должен окончательно стать частью Anorm, просто нужно полировать и тестировать. Дай мне знать, помогло ли оно тебе.