Skip to content
This repository has been archived by the owner on Jun 17, 2024. It is now read-only.

Commit

Permalink
Merge pull request #82 from reinierl/master
Browse files Browse the repository at this point in the history
do not go via local time when parsing UTC timestamps #81
  • Loading branch information
t3hnar committed Mar 27, 2017
2 parents bb19d5d + 6d224b3 commit ce8bfee
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 9 deletions.
18 changes: 9 additions & 9 deletions src/main/scala/eventstore/cluster/ClusterProtocol.scala
Original file line number Diff line number Diff line change
Expand Up @@ -20,22 +20,22 @@ object ClusterProtocol extends DefaultJsonProtocol {

implicit object DateTimeFormat extends JsonFormat[DateTime] {
val formats = List(
JodaFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSSSS'Z'"),
JodaFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSSSSS'Z'"),
JodaFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss'Z'"),
JodaFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSSS'Z'"),
JodaFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSS'Z'"),
JodaFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"),
JodaFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SS'Z'"),
JodaFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.S'Z'")
JodaFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSSSSZ"),
JodaFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZ"),
JodaFormat.forPattern("yyyy-MM-dd'T'HH:mm:ssZ"),
JodaFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSSSZ"),
JodaFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSSZ"),
JodaFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ"),
JodaFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSZ"),
JodaFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SZ")
)

def write(x: DateTime): JsValue = JsString(x.toString(formats.head))

def read(json: JsValue): DateTime = {
def loop(x: String)(h: DateTimeFormatter, t: List[DateTimeFormatter]): DateTime =
Try(h.parseDateTime(x)) match {
case Success(dt) => dt.withZoneRetainFields(DateTimeZone.UTC)
case Success(dt) => dt.withZone(DateTimeZone.UTC)
case Failure(_) =>
if (t.nonEmpty) loop(x)(t.head, t.tail)
else deserializationError(s"could not find a date/time format for $x")
Expand Down
5 changes: 5 additions & 0 deletions src/test/scala/eventstore/cluster/DateFormatSpec.scala
Original file line number Diff line number Diff line change
Expand Up @@ -21,5 +21,10 @@ class DateFormatSpec extends Specification {
val expected = new DateTime(2015, 1, 29, 12, 28, 54, 830, DateTimeZone.UTC)
DateTimeFormat.read(JsString("2015-01-29T12:28:54.8302665Z")) mustEqual expected
}

"parse 2017-03-26T02:28:54.8302665Z" in {
val expected = new DateTime(2017, 3, 26, 2, 28, 54, 830, DateTimeZone.UTC)
DateTimeFormat.read(JsString("2017-03-26T02:28:54.8302665Z")) mustEqual expected
}
}
}

0 comments on commit ce8bfee

Please sign in to comment.