From ab29402b99dbab92a0361b4474dccd9f458ae876 Mon Sep 17 00:00:00 2001
From: "Stefan E. Funk" <funk@sub.uni-goettingen.de>
Date: Tue, 14 Feb 2023 14:38:10 +0100
Subject: [PATCH] fix: add localtime with server default time zone

---
 .../textgrid/middleware/OaipmhUtilities.java    | 16 ++++++----------
 .../middleware/test/TestOaipmhUtilities.java    | 17 ++++++++++++++++-
 .../test/online/dh/TestDHOaipmhOnline.java      |  2 +-
 3 files changed, 23 insertions(+), 12 deletions(-)

diff --git a/oaipmh-core/src/main/java/info/textgrid/middleware/OaipmhUtilities.java b/oaipmh-core/src/main/java/info/textgrid/middleware/OaipmhUtilities.java
index 6c096490..fe613333 100644
--- a/oaipmh-core/src/main/java/info/textgrid/middleware/OaipmhUtilities.java
+++ b/oaipmh-core/src/main/java/info/textgrid/middleware/OaipmhUtilities.java
@@ -7,6 +7,7 @@ import java.math.BigInteger;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.time.Instant;
+import java.time.LocalDateTime;
 import java.time.OffsetDateTime;
 import java.time.ZoneId;
 import java.time.format.DateTimeFormatter;
@@ -154,23 +155,18 @@ public class OaipmhUtilities {
 
     log.fine("original DateTimeString: " + originalDateTimeString);
 
-    OffsetDateTime odt;
     try {
-      odt = OffsetDateTime.parse(originalDateTimeString);
+      OffsetDateTime odt = OffsetDateTime.parse(originalDateTimeString);
+      result = UTC_FORMATTER.format(Instant.from(odt));
     }
 
     // TODO We are missing to set time zones on dcterms date fields!! Workaround for all DARIAH-DE
-    // Repository dates so far is adding the correct time zone parameters!
+    // Repository dates so far is using LocalDateTime here!
     catch (DateTimeParseException e) {
-
-      log.warning("can not parse time format for date: " + originalDateTimeString
-          + ", assuming timezone +01:00!");
-
-      odt = OffsetDateTime.parse(originalDateTimeString + "+01:00");
+      LocalDateTime ldt = LocalDateTime.parse(originalDateTimeString);
+      result = UTC_FORMATTER.format(ldt.atZone(ZoneId.systemDefault()).toInstant());
     }
 
-    result = UTC_FORMATTER.format(Instant.from(odt));
-
     log.fine("parsed to UTC: " + result);
 
     return result;
diff --git a/oaipmh-core/src/test/java/info/textgrid/middleware/test/TestOaipmhUtilities.java b/oaipmh-core/src/test/java/info/textgrid/middleware/test/TestOaipmhUtilities.java
index f1168648..0f4d219a 100644
--- a/oaipmh-core/src/test/java/info/textgrid/middleware/test/TestOaipmhUtilities.java
+++ b/oaipmh-core/src/test/java/info/textgrid/middleware/test/TestOaipmhUtilities.java
@@ -187,7 +187,7 @@ public class TestOaipmhUtilities {
    * @throws DatatypeConfigurationException
    */
   @Test
-  public void testGetUTCDateAsString() throws DatatypeConfigurationException {
+  public void testGetUTCDateAsStringTG() throws DatatypeConfigurationException {
 
     String tgDateStamp = "2012-02-10T23:45:00.507+01:00";
     String expectedUTCDate = "2012-02-10T22:45:00Z";
@@ -198,6 +198,21 @@ public class TestOaipmhUtilities {
     }
   }
 
+  /**
+   * @throws DatatypeConfigurationException
+   */
+  @Test
+  public void testGetUTCDateAsStringDH() throws DatatypeConfigurationException {
+
+    String tgDateStamp = "2012-02-10T23:45:00.507";
+    String expectedUTCDate = "2012-02-10T22:45:00Z";
+    String utcDate = OaipmhUtilities.getUTCDateAsString(tgDateStamp);
+
+    if (!utcDate.equals(expectedUTCDate)) {
+      assertTrue(utcDate + " != " + expectedUTCDate, false);
+    }
+  }
+
   /**
    * @throws ParseException
    * @throws DatatypeConfigurationException
diff --git a/oaipmh-core/src/test/java/info/textgrid/middleware/test/online/dh/TestDHOaipmhOnline.java b/oaipmh-core/src/test/java/info/textgrid/middleware/test/online/dh/TestDHOaipmhOnline.java
index 89621394..8de55438 100644
--- a/oaipmh-core/src/test/java/info/textgrid/middleware/test/online/dh/TestDHOaipmhOnline.java
+++ b/oaipmh-core/src/test/java/info/textgrid/middleware/test/online/dh/TestDHOaipmhOnline.java
@@ -26,7 +26,7 @@ import info.textgrid.middleware.test.online.OaipmhUtilitiesOnline;
  * Please set PROPERTIES_FILE and TEST_ALL_PAGES <b>HERE</b>!
  * </p>
  * 
- * @author Stefan E. Funk, SUB Göttingen
+ * @author Stefan E. Funk, SUB Göttingen //
  */
 @Ignore
 public class TestDHOaipmhOnline {
-- 
GitLab