From 668bc04155554db6e4ab803e9f867b24761425c6 Mon Sep 17 00:00:00 2001
From: Timm Fitschen <t.fitschen@indiscale.com>
Date: Fri, 7 Oct 2022 11:42:35 +0200
Subject: [PATCH] MAINT: Refactor UTCTimeZoneShiftTest, more docs

---
 .../java/org/caosdb/datetime/UTCTimeZoneShift.java  | 13 +++++++++----
 .../org/caosdb/server/resource/InfoResource.java    |  3 ++-
 .../org/caosdb/datetime/UTCTimeZoneShiftTest.java   |  2 +-
 3 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/src/main/java/org/caosdb/datetime/UTCTimeZoneShift.java b/src/main/java/org/caosdb/datetime/UTCTimeZoneShift.java
index 7b259973..4b3063b8 100644
--- a/src/main/java/org/caosdb/datetime/UTCTimeZoneShift.java
+++ b/src/main/java/org/caosdb/datetime/UTCTimeZoneShift.java
@@ -127,15 +127,20 @@ public class UTCTimeZoneShift extends TimeZone {
   }
 
   /**
-   * Generate an ISO 8601 time zone offset string (e.g. +0200) from the given raw offset in
-   * milliseconds.
+   * Generate an ISO 8601 time zone offset string (e.g. +0200) for the given time zone at the given
+   * date.
+   *
+   * <p>The date is necessary to decide whether the time zone (e.g. Europe/Berlin) is in the
+   * daylight saving regime or not. In winter Europe/Berlin has a +0100 offset, in summer it is
+   * +0200.
    *
    * @param timezone - the time zone in question.
+   * @param date - the date for which the offset is to be calculated (unix time stamp).
    * @return ISO 8601 time zone offset.
    */
-  public static String getISO8601Offset(TimeZone timezone) {
+  public static String getISO8601Offset(TimeZone timezone, long date) {
     int divisor = 1000 * 60 * 60;
-    int offset = timezone.getOffset(System.currentTimeMillis());
+    int offset = timezone.getOffset(date);
     int sign = Integer.signum(offset);
     int h = Integer.divideUnsigned(sign * offset, divisor);
     int m = Integer.remainderUnsigned(sign * offset, divisor);
diff --git a/src/main/java/org/caosdb/server/resource/InfoResource.java b/src/main/java/org/caosdb/server/resource/InfoResource.java
index b6754369..452ea795 100644
--- a/src/main/java/org/caosdb/server/resource/InfoResource.java
+++ b/src/main/java/org/caosdb/server/resource/InfoResource.java
@@ -55,8 +55,9 @@ public class InfoResource extends AbstractCaosDBServerResource {
 
   public Element getTimeZone() {
     TimeZone d = TimeZone.getDefault();
+    long currentDate = System.currentTimeMillis(); // show time zone offset for the current date.
     return new Element("TimeZone")
-        .setAttribute("offset", UTCTimeZoneShift.getISO8601Offset(d))
+        .setAttribute("offset", UTCTimeZoneShift.getISO8601Offset(d, currentDate))
         .setAttribute("id", d.getID())
         .addContent(d.getDisplayName());
   }
diff --git a/src/test/java/org/caosdb/datetime/UTCTimeZoneShiftTest.java b/src/test/java/org/caosdb/datetime/UTCTimeZoneShiftTest.java
index 53cb8b97..9cfa98b1 100644
--- a/src/test/java/org/caosdb/datetime/UTCTimeZoneShiftTest.java
+++ b/src/test/java/org/caosdb/datetime/UTCTimeZoneShiftTest.java
@@ -10,6 +10,6 @@ class UTCTimeZoneShiftTest {
   @Test
   void test() {
     TimeZone timeZone = TimeZone.getTimeZone("CST");
-    assertEquals("-0500", UTCTimeZoneShift.getISO8601Offset(timeZone));
+    assertEquals("-0500", UTCTimeZoneShift.getISO8601Offset(timeZone, 1665133324000L));
   }
 }
-- 
GitLab