Playframework scala用RFC1123_PATTERN读取json日期到nscala DateTime

时间:2016-03-10 16:45:04

标签: json scala nscala-time

我正在尝试使用特定格式的第三方API读取json对象中的日期,为简单起见,我将尽我所能。这是日期

"date_created" -> "Mon, 19 Oct 2015 07:07:03 +0000",

我正在尝试将json解析为像这样的自定义对象

(JsPath \ "date_created").read[SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z", Locale.US)].map{ response => new com.github.nscala_time.time.Imports.DateTime(response) } and

不工作,但是有办法让这项工作吗?

谢谢

1 个答案:

答案 0 :(得分:2)

您应该为DateTime定义Reads

implicit val readDateTime: Reads[DateTime] = new Reads[DateTime] {
  private val format = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z", Locale.US)

  override def reads(json: JsValue): JsResult[DateTime] = json match {

    case JsString(d) => Try(format.parse(d)).map(t => JsSuccess(new DateTime(t))).getOrElse(error(json))
    case _ => error(json)
  }

  private def error(json: JsValue) = JsError(s"Unable to parse $json into a DateTime with format EEE, dd MMM yyyy HH:mm:ss z ")
}

然后你的代码就是

(JsPath \ "date_created").read[DateTime]

注意: []之间的代码必须是类型定义,并且在代码示例中看起来就像是在尝试发送格式化程序的实例。