All Downloads are FREE. Search and download functionalities are using the official Maven repository.

scala.pickling.pickler.Date.scala Maven / Gradle / Ivy

The newest version!
package scala.pickling
package pickler

import java.util.{Date, TimeZone}
import java.text.SimpleDateFormat

trait DatePicklers extends PrimitivePicklers {
  implicit val datePickler: Pickler[Date] with Unpickler[Date] =
  new AbstractPicklerUnpickler[Date] {
    private val dateFormatTemplate = {
      val format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'") //use ISO_8601 format
      format.setLenient(false)
      format.setTimeZone(TimeZone.getTimeZone("UTC"))
      format
    }
    private def dateFormat = dateFormatTemplate.clone.asInstanceOf[SimpleDateFormat]

    def tag = FastTypeTag[Date]
    def pickle(picklee: Date, builder: PBuilder): Unit = {
      builder.beginEntry(picklee, tag)

      builder.putField("value", b => {
        b.hintElidedType(implicitly[FastTypeTag[String]])
        stringPickler.pickle(dateFormat.format(picklee), b)
      })

      builder.endEntry()
    }
    def unpickle(tag: String, reader: PReader): Any = {
      val reader1 = reader.readField("value")
      reader1.hintElidedType(implicitly[FastTypeTag[String]])
      val result = stringPickler.unpickleEntry(reader1)
      dateFormat.parse(result.asInstanceOf[String])
    }
  }
  internal.currentRuntime.picklers.registerPicklerUnpickler(datePickler)
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy