Explicitly set time zone
Make sure timezone is always set to UTC when formatting dates.
Feature: Issue 9872
Change-Id: Ibb54fe2994cb1b10699b0dd62115d4869eb70bd0
diff --git a/src/main/scala/com/gerritforge/analytics/support/ops/AnalyticsTimeOps.scala b/src/main/scala/com/gerritforge/analytics/support/ops/AnalyticsTimeOps.scala
index 6cb59d0..9012617 100644
--- a/src/main/scala/com/gerritforge/analytics/support/ops/AnalyticsTimeOps.scala
+++ b/src/main/scala/com/gerritforge/analytics/support/ops/AnalyticsTimeOps.scala
@@ -23,19 +23,25 @@
import java.sql.Timestamp
import java.text.SimpleDateFormat
import java.time.{Instant, LocalDate, OffsetDateTime}
+ import java.util.TimeZone
import scala.util.Try
-
object AnalyticsDateTimeFormater {
val yyyy_MM_dd_HHmmss_SSSSSSSSS: DateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSSSSSSS")
val yyyy_MM_dd: DateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd")
- val yyyyMMddHH: SimpleDateFormat = new SimpleDateFormat("yyyyMMddHH")
- val yyyyMMdd: SimpleDateFormat = new SimpleDateFormat("yyyyMMdd")
- val yyyyMM: SimpleDateFormat = new SimpleDateFormat("yyyyMM")
- val yyyy: SimpleDateFormat = new SimpleDateFormat("yyyy")
+ val yyyyMMddHH: SimpleDateFormat = buildSimpleDateFormatUTC("yyyyMMddHH")
+ val yyyyMMdd: SimpleDateFormat= buildSimpleDateFormatUTC("yyyyMMdd")
+ val yyyyMM: SimpleDateFormat = buildSimpleDateFormatUTC("yyyyMM")
+ val yyyy: SimpleDateFormat = buildSimpleDateFormatUTC("yyyy")
+
+ private def buildSimpleDateFormatUTC(pattern: String): SimpleDateFormat = {
+ val simpleDateFormat = new SimpleDateFormat(pattern)
+ simpleDateFormat.setTimeZone(TimeZone.getTimeZone("UTC"))
+ simpleDateFormat
+ }
}
object CommonTimeOperations {
diff --git a/src/test/scala/com/gerritforge/analytics/support/ops/AnalyticsTimeOpsSpec.scala b/src/test/scala/com/gerritforge/analytics/support/ops/AnalyticsTimeOpsSpec.scala
index c76efdb..1c9adb8 100644
--- a/src/test/scala/com/gerritforge/analytics/support/ops/AnalyticsTimeOpsSpec.scala
+++ b/src/test/scala/com/gerritforge/analytics/support/ops/AnalyticsTimeOpsSpec.scala
@@ -59,8 +59,7 @@
}
- "Simple Date Formats" should "convert to the correct strings" in {
-
+ "Simple Date Formats" should "convert to the correct strings - yyyyMMddHH" in {
val epochValueUTC =
LocalDateTime
.of(2018, 1, 1, 12, 0, 0, 0)
@@ -68,13 +67,39 @@
.toInstant.toEpochMilli
val yyyyMMddHHStr = "2018010112"
- val yyyyMMddStr = "20180101"
- val yyyyMMStr = "201801"
- val yyyyStr = "2018"
-
AnalyticsDateTimeFormater.yyyyMMddHH.format(epochValueUTC) should equal(yyyyMMddHHStr)
+ }
+
+ it should "convert to the correct strings - yyyyMMdd" in {
+ val epochValueUTC =
+ LocalDateTime
+ .of(2018, 1, 1, 12, 0, 0, 0)
+ .atOffset(ZoneOffset.UTC)
+ .toInstant.toEpochMilli
+
+ val yyyyMMddStr = "20180101"
AnalyticsDateTimeFormater.yyyyMMdd.format(epochValueUTC) should equal(yyyyMMddStr)
+ }
+
+ it should "convert to the correct strings - yyyyMM" in {
+ val epochValueUTC =
+ LocalDateTime
+ .of(2018, 1, 1, 12, 0, 0, 0)
+ .atOffset(ZoneOffset.UTC)
+ .toInstant.toEpochMilli
+
+ val yyyyMMStr = "201801"
AnalyticsDateTimeFormater.yyyyMM.format(epochValueUTC) should equal(yyyyMMStr)
+ }
+
+ it should "convert to the correct strings - yyyy" in {
+ val epochValueUTC =
+ LocalDateTime
+ .of(2018, 1, 1, 12, 0, 0, 0)
+ .atOffset(ZoneOffset.UTC)
+ .toInstant.toEpochMilli
+
+ val yyyyStr = "2018"
AnalyticsDateTimeFormater.yyyy.format(epochValueUTC) should equal(yyyyStr)
}