【问题标题】:Joda DateTime Field on Play Framework 2.0's AnormPlay Framework 2.0 的 Anorm 上的 Joda DateTime 字段
【发布时间】:2012-07-08 10:52:23
【问题描述】:

我一直在学习 Play Framework,推荐的访问数据库的方法是使用内置异常组件。问题是,在异常情况下对 DateTime 没有很好的支持。它仍在使用java.util.Date

有没有办法在异常中使用 Joda DateTime 或 java.sql.Timestamp?

如果无法使用 Joda 或 java.sql,我们可以为此添加一个模块吗?

【问题讨论】:

  • @adis 我认为这是关于 JPA 的,这是针对异常情况的......

标签: scala playframework-2.0


【解决方案1】:

更新:从 2.3.7 开始,现在是 natively supported

我正在使用以下代码与 Anorm 无缝结合使用 DateTime。

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 的一部分,只是需要经过打磨和更多测试。 让我知道它是否对您有所帮助。

【讨论】:

  • 这有帮助。非常感谢。
  • 您只需将代码放在某处(例如,某些实用程序包),然后将其导入您处理 SQL 语句和结果的位置import AnormExtension._。由于函数被定义为implicit,一旦它们在范围内,Anorm 将自动使用它们进行转换。
  • 你能解释一下吗?我什至不确定为什么会出现问题,以及为什么会解决它?谢谢!
  • 读取数据库很简单:DB.withConnection { implicit connection => SQL(s"select $fieldName from $tableName where ${tableName}.id = " + """{id}""").on("id" -> id).as(scalar[DateTime].singleOpt).getOrElse(new DateTime(0l)) }' But how does on do so with a given DateTimeZone`?
  • Ah -- .toDateTime(DateTimeZone.UTC) 如果 JVM 已经在 UTC 时间,最好简单地传递原始值。 (如果您从使用公共/共享库的“其他”机器进行维护可能是通配符,因此最好明确设置)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-29
  • 2018-03-27
  • 2012-01-24
  • 2012-07-28
相关资源
最近更新 更多