How can I write dates to ISO 8601 format using JSON Writes?

date, iso8601, json, playframework, scala

Solution

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

The key here is to define your own implicit `Writes[java.util.Date]`. If you import `DefaultDateWrites` your `customDateWrites` will be silently ignored (I wonder why there is no ambiguous implicit warning).

Problem

I've got a case calss ``` import java.sql.Date case class GetMilestoneLanguage( ... due_date: Option[Date], ... ) object GetMilestoneLanguage { implicit val writes = Json.writes[GetMilestoneLanguage] } ``` Its outputting the JSON in UTC - and I need it to be iso 8601. I'm NOT use Joda time. What the easiest way to achieve getting the date in iso 8601? Thanks

Original source