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