【问题标题】:How can I write dates to ISO 8601 format using JSON Writes?如何使用 JSON Writes 将日期写入 ISO 8601 格式?
【发布时间】:2014-12-03 16:37:50
【问题描述】:

我有一个案例课

import java.sql.Date
case class GetMilestoneLanguage(
                               ...
                   due_date: Option[Date],
                                ...
                   )
object GetMilestoneLanguage {
  implicit val writes = Json.writes[GetMilestoneLanguage]
}

它以 UTC 格式输出 JSON - 我需要它是 iso 8601。我不使用 Joda 时间。

在 iso 8601 中获取日期的最简单方法是什么?

谢谢

【问题讨论】:

    标签: json scala date playframework iso8601


    【解决方案1】:
    import play.api.libs.json.{Json, Writes}
    import play.api.libs.json.Writes.dateWrites // do not import everything here, especially DefaultDateWrites
    
    case class GetMilestoneLanguage(param1: String, dueDate: Option[java.sql.Date])
    
    object GetMilestoneLanguage {
      implicit val customDateWrites: Writes[java.util.Date] = dateWrites("yyyy-MM-dd'T'HH:mm:ss'Z'")
    
      implicit val writes =  Json.writes[GetMilestoneLanguage]
    }
    

    这里的关键是定义你自己的隐式Writes[java.util.Date]。如果您导入 DefaultDateWrites 您的 customDateWrites 将被默默忽略(我想知道为什么没有模棱两可的隐式警告)。

    【讨论】:

    • 你可以使用import play.api.libs.json.Writes.{ dateWrites => _, _ => _ } 导入除dateWrites 之外的所有内容,我认为。你的答案比我的好。
    • 感谢您的提示!我不知道那种语法。
    • 谢谢 - 只是想在这里接受我的接受 - 因为它确实通过使用 json write macro helper 节省了样板
    【解决方案2】:

    您可以使用Writes 伴随对象上提供的帮助器创建自定义Writes[java.util.Date]。不过,您将无法使用 Json.writes 宏助手。

    import play.api.libs.json._
    import play.api.libs.functional.syntax._
    import play.api.libs.json.Writes._
    
    case class GetMilestoneLanguage(param1: String, dueDate: Option[Date], param3: String)
    
    object GetMilestoneLanguage {
      implicit val writes = (
        (__ \ "param1").write[String] and
        (__ \ "due_date").write(dateWrites("yyyy-MM-dd'T'HH:mm:ss'Z'")) and
        (__ \ "param3").write[String]
      )(unlift(GetMilestoneLanguage.unapply))
    }
    

    【讨论】:

      猜你喜欢
      • 2015-02-28
      • 1970-01-01
      • 2016-03-06
      • 1970-01-01
      • 2010-10-28
      • 1970-01-01
      • 2013-05-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多