2014-12-03 120 views
2

我有一個情況下CALSS如何使用JSON寫入將日期寫入ISO 8601格式?

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

其輸出JSON在UTC - 我需要它是ISO 8601。我不使用喬達時間。

在iso8601中獲取日期的最簡單方法是什麼?

感謝

回答

7
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將被默默忽略(我想知道爲什麼沒有含糊的隱含警告)。

+1

你可以做'import play.api.libs.json.Writes。{dateWrites => _,_ => _}'來導入除'dateWrites'之外的所有東西,我想。你的回答比我的好。 – Ryan 2014-12-04 17:54:00

+0

感謝您的提示!我不知道這種語法。 – Dimitri 2014-12-04 17:57:00

+0

謝謝 - 剛剛踏入我的接受在這裏 - 因爲它通過使用json寫入宏助手保存鍋爐板 – brent 2014-12-07 15:10:45

1

您可以使用所提供的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)) 
}