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)
   }