Skip to content

Instantly share code, notes, and snippets.

@robinraju
Created April 8, 2022 10:44
Show Gist options
  • Save robinraju/697d820d8ae50d4a56c1bf4d50af52d7 to your computer and use it in GitHub Desktop.
Save robinraju/697d820d8ae50d4a56c1bf4d50af52d7 to your computer and use it in GitHub Desktop.
import java.time.ZonedDateTime
import java.time.format.DateTimeFormatter
import cats.implicits._
import io.circe.{ Codec, Decoder, Encoder }
// circe codec for serializing ZonedDateTime into JSON
object CirceDateTimeUtil {
val dateFormatter: DateTimeFormatter = DateTimeFormatter.ISO_ZONED_DATE_TIME
private lazy val dateEncoder: Encoder[ZonedDateTime] = Encoder.encodeString.contramap[ZonedDateTime](_.format(dateFormatter))
private lazy val dateDecoder: Decoder[ZonedDateTime] = Decoder.decodeString.emap[ZonedDateTime] { str =>
Either.catchNonFatal(ZonedDateTime.parse(str, dateFormatter)).leftMap(_.getMessage)
}
implicit lazy val zonedDateTimeCodec: Codec[ZonedDateTime] = Codec.from(dateDecoder, dateEncoder)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment