Skip to content

Instantly share code, notes, and snippets.

@jdaily
Created December 17, 2014 18:34
Show Gist options
  • Save jdaily/0df1ba5509df1be5f627 to your computer and use it in GitHub Desktop.
Save jdaily/0df1ba5509df1be5f627 to your computer and use it in GitHub Desktop.
Mongo DateTime Parser in Scala
package models
import play.api.libs.json._
import org.joda.time.{DateTimeZone, DateTime, LocalDateTime}
import reactivemongo.bson.BSONDateTime
import reactivemongo.bson.BSONReader
import reactivemongo.bson.BSONWriter
object MongoDateTime {
implicit val localDateTimeRead: Reads[LocalDateTime] =
(__ \ "$date").read[Long].map { dateTime => new LocalDateTime(dateTime, DateTimeZone.UTC) }
implicit val localDateTimeWrite: Writes[LocalDateTime] = new Writes[LocalDateTime] {
def writes(dateTime: LocalDateTime): JsValue = Json.obj(
"$date" -> dateTime.toDateTime(DateTimeZone.UTC).getMillis
)
}
implicit val dateTimeRead: Reads[DateTime] =
(__ \ "$date").read[Long].map { dateTime =>
new DateTime(dateTime, DateTimeZone.UTC)
}
implicit val dateTimeWrite: Writes[DateTime] = new Writes[DateTime] {
def writes(dateTime: DateTime): JsValue = Json.obj(
"$date" -> dateTime.getMillis
)
}
implicit val dateTimeFormats = Format(dateTimeRead, dateTimeWrite)
implicit val localDateTimeFormats = Format(localDateTimeRead, localDateTimeWrite)
implicit object DatetimeReader extends BSONReader[BSONDateTime, DateTime] {
def read(bson: BSONDateTime): DateTime = new DateTime(bson.value)
}
implicit object DatetimeWriter extends BSONWriter[DateTime, BSONDateTime] {
def write(t: DateTime): BSONDateTime = BSONDateTime(t.getMillis)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment