Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 游戏框架2.0的Anorm上的Joda DateTime字段_Scala_Playframework 2.0 - Fatal编程技术网

Scala 游戏框架2.0的Anorm上的Joda DateTime字段

Scala 游戏框架2.0的Anorm上的Joda DateTime字段,scala,playframework-2.0,Scala,Playframework 2.0,我一直在学习Play Framework,建议使用内置的anorm组件访问数据库。问题是,在anorm中没有对DateTime的良好支持。它仍然在使用java.util.Date 有没有办法在anorm中使用Joda DateTime或java.sql.Timestamp 如果没有办法使用Joda或java.sql,我们可以为其添加一个模块吗?更新:因为现在是播放2.3.7 我使用下面的代码与Anorm无缝地使用DateTime import org.joda.time._ import org

我一直在学习Play Framework,建议使用内置的anorm组件访问数据库。问题是,在anorm中没有对DateTime的良好支持。它仍然在使用java.util.Date

有没有办法在anorm中使用Joda DateTime或java.sql.Timestamp

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

更新:因为现在是播放2.3.7

我使用下面的代码与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的一部分,只是需要打磨和测试。
让我知道它是否对你有帮助

@adis我想这是关于JPA的,这是给阿诺姆的……这很有帮助。非常感谢。您只需将代码放在某个地方,例如放在某个实用程序包中,然后通过导入AnormExtension处理SQL语句和结果。由于这些函数被定义为隐式函数,一旦它们进入作用域,Anorm将自动使用它们进行转换。您能解释一下吗?我甚至不知道为什么会出现这个问题,为什么会解决这个问题?谢谢读取数据库很容易:DB.withConnection{implicit connection=>SQLsselect$fieldName from$tableName where${tableName}.id=+{id}.onid->id.asscalar[DateTime].singleOpt.getorelsew DateTime0l}'但是on如何使用给定的DateTimeZone`?啊-.toDateTimeDateTimeZone.UTC,如果JVM已经在UTC时间,则最好只传递原始值。如果您在使用公共/共享库的其他机器上进行维护,那么它可能是一个通配符,因此最好显式设置它