Created
December 17, 2014 18:34
-
-
Save jdaily/0df1ba5509df1be5f627 to your computer and use it in GitHub Desktop.
Mongo DateTime Parser in Scala
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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