【问题标题】:using datetime/timestamp in scala slick在 scala slick 中使用日期时间/时间戳
【发布时间】:2017-11-19 05:54:13
【问题描述】:

有没有简单的方法在 scala 中使用日期时间/时间戳?什么是最佳做法?我目前使用“日期”来保存数据,但我也想保存当前时间。 我正在努力设定日期。这是我的代码:

val now = new java.sql.Timestamp(new java.util.Date().getTime)

我也尝试过这样做:

val now = new java.sql.Date(new java.util.Date().getTime)

将进化中的数据类型更改为“时间戳”时,出现错误:

case class MyObjectModel(
                               id: Option[Int],
                               title: String,
                               createdat: Timestamp,
                               updatedat: Timestamp,
                               ...)

object MyObjectModel{
  implicit val myObjectFormat = Json.format[MyObjectModel]
}

控制台:

app\models\MyObjectModel.scala:31: No implicit format for 
java.sql.Timestamp available.
[error]   implicit val myObjectFormat = Json.format[MyObjectModel]
[error]                                               ^
[error] one error found
[error] (compile:compileIncremental) Compilation failed

更新:

object ProcessStepTemplatesModel {
  implicit lazy val timestampFormat: Format[Timestamp] = new Format[Timestamp] {
    override def reads(json: JsValue): JsResult[Timestamp] = json.validate[Long].map(l => Timestamp.from(Instant.ofEpochMilli(l)))

    override def writes(o: Timestamp): JsValue = JsNumber(o.getTime)
  }
  implicit val processStepFormat = Json.format[ProcessStepTemplatesModel]
}

【问题讨论】:

    标签: scala playframework timestamp playframework-2.0


    【解决方案1】:

    尝试在您的代码中使用它

    implicit object timestampFormat extends Format[Timestamp] {
        val format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SS'Z'")
        def reads(json: JsValue) = {
          val str = json.as[String]
          JsSuccess(new Timestamp(format.parse(str).getTime))
        }
        def writes(ts: Timestamp) = JsString(format.format(ts))
      }
    

    它以 JS 兼容格式(反)序列化,如下面的“2018-01-06T18:31:29.436Z”

    请注意:隐式对象在使用前应在代码中清除

    【讨论】:

      【解决方案2】:

      我猜你的问题在What's the standard way to work with dates and times in Scala? Should I use Java types or there are native Scala alternatives? 处理。

      使用 Java 8“java.time”。

      在您提到 Slick(Scala 数据库库)的主题中,但您得到的错误来自 Json 库,它说您没有将 java.sql.Timestamp 转换为 Json 的转换器。在不知道您使用的是哪个 Json 库的情况下,很难为您提供一个工作示例。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-11-02
        • 1970-01-01
        • 2010-10-31
        • 1970-01-01
        • 2013-06-16
        • 1970-01-01
        • 2011-10-01
        相关资源
        最近更新 更多