加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala – Play Framework 2.0的Anorm上的Joda DateTime字段

发布时间:2020-12-16 09:45:57 所属栏目:安全 来源:网络整理
导读:我一直在学习Play Framework,而推荐的访问数据库的方法是使用anorm组件中的构建。事实上,没有很好的支持DateTime在anorm。它仍然使用java.util.Date。 有没有办法使用Joda DateTime或java.sql.Timestamp在anorm? 如果没有办法使用Joda或者java.sql,我们
我一直在学习Play Framework,而推荐的访问数据库的方法是使用anorm组件中的构建。事实上,没有很好的支持DateTime在anorm。它仍然使用java.util.Date。

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

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

解决方法

更新:自从播放2.3.7这是现在 natively supported。

我正在使用以下代码与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的一部分,只需要抛光和更多的测试。让我知道,如果它帮助你。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读