diff --git a/src/main/java/org/caosdb/datetime/UTCTimeZoneShift.java b/src/main/java/org/caosdb/datetime/UTCTimeZoneShift.java index 7b259973148301b99b02c9880fe937ac3794d017..4b3063b82ede350d3e58f8537bb17c00a091b2a3 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 b6754369a72873243eed626dbe42dcea328335ac..452ea7956d75ff8ea4d9a5f3cf8e24df1980caf3 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 53cb8b97bb8b9aa6ddd7a24ee9cf61e31398f794..9cfa98b144d5f3a4c66a008722d0f03f8d626840 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)); } }