Joda DateTime Field on Play Framework 2.0's Anorm

前端 未结 1 1158
暗喜
暗喜 2020-12-13 10:08

I\'ve been learning Play Framework, and the recommended way to access a database is using the build in anorm component. Thing is, there\'s no good support for DateTime in an

相关标签:
1条回答
  • 2020-12-13 10:39

    update: Since play 2.3.7 this is now natively supported.

    I am using the following piece of code to work with DateTime seamlessly with 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()) )
        }
    }
    
    }
    

    I think it should definitively be part of Anorm, just need to be polished and more tested. Let me know if it has helped you.

    0 讨论(0)
提交回复
热议问题