2017-06-16 128 views
1

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

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

回答

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

这是(DE)连载中像下面这样的JS兼容格式 “2018-01-06T18:31:29.436Z”

请注意:隐含对象在使用前应在代码中被删除