最初に
今回は、APIの返却物でよくある日付を変換してくれるDeserializerを備忘録として残しておきます。
コード
@ExperimentalSerializationApi
@Serializer(forClass = ZonedDateTime::class)
object ZonedDateTimeSerializer : KSerializer<ZonedDateTime> {
private val formatter = DateTimeFormatter.ISO_OFFSET_DATE_TIME
override fun deserialize(decoder: Decoder): ZonedDateTime =
ZonedDateTime.parse(decoder.decodeString(), formatter)
override fun serialize(encoder: Encoder, value: ZonedDateTime) =
encoder.encodeString(value.format(formatter))
}
変換用コードは上記の通りとなっています。
String
とZonedDateTime
の相互変換ができる様になっています。
返却される形式としては2017-12-04T11:00:00+09:00
です
呼び出す場合は、返却物を受け取る時のデータクラスにある要素に対して下記を設定するだけです
@Serializable(with = ZonedDateTimeSerializer::class)
最後に
返却物の日付をユーザー側に表示したいときなどにこちらを使用することで、表示の際の添削や加工がしやすくなります。
自由度が高いため日付だけでなく、他のクラスに変換したいときでも利用することができるので覚えておいて損はありません。