在 scala slick 中使用 datetime/timestamp
using datetime/timestamp in scala slick
有没有在 scala 中使用 datetime/timestamp 的简单方法?什么是最佳实践?我目前使用 "date" 来持久化数据,但我也想持久化当前时间。
我正在努力设定日期。这是我的代码:
val now = new java.sql.Timestamp(new java.util.Date().getTime)
我也试过这样做:
val now = new java.sql.Date(new java.util.Date().getTime)
将我的演进中的数据类型更改为 "timestamp" 时,出现错误:
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]
}
我猜你的问题在 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 Database Library) 但你得到的错误来自 Json 库并且它说你没有 java.sql.Timestamp 到 Json。不知道您使用的是哪个 Json 库,很难通过一个工作示例帮助您。
尝试在您的代码中使用它
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 中使用 datetime/timestamp 的简单方法?什么是最佳实践?我目前使用 "date" 来持久化数据,但我也想持久化当前时间。 我正在努力设定日期。这是我的代码:
val now = new java.sql.Timestamp(new java.util.Date().getTime)
我也试过这样做:
val now = new java.sql.Date(new java.util.Date().getTime)
将我的演进中的数据类型更改为 "timestamp" 时,出现错误:
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]
}
我猜你的问题在 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 Database Library) 但你得到的错误来自 Json 库并且它说你没有 java.sql.Timestamp 到 Json。不知道您使用的是哪个 Json 库,很难通过一个工作示例帮助您。
尝试在您的代码中使用它
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”
请注意:隐式对象在使用前需要在代码中清除