在 Scala Slick 中使用日期时间/时间戳



有没有一种简单的方法可以在 scala 中使用日期时间/时间戳?什么是最佳实践?我目前使用"date"来持久保存数据,但我也想持久化当前时间。我正在努力确定日期。这是我的代码:

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]
}

安慰:

appmodelsMyObjectModel.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]
}

尝试在代码中使用它

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">

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

我想你的问题在 Scala 中使用日期和时间的标准方法是什么?我应该使用 Java 类型还是有原生的 Scala 替代品?

使用Java 8"java.time"。

在主题中,您提到了Slick(Scala数据库库(,但是您收到的错误来自Json库,它说您没有java.sql.Timestamp到Json的转换器。如果不知道您正在使用哪个 Json 库,则很难为您提供工作示例。

最新更新