diff --git a/pdf-umbenenner-adapter-out/src/main/java/de/gecheckt/pdf/umbenenner/adapter/out/sqlite/SqliteDocumentRecordRepositoryAdapter.java b/pdf-umbenenner-adapter-out/src/main/java/de/gecheckt/pdf/umbenenner/adapter/out/sqlite/SqliteDocumentRecordRepositoryAdapter.java index f5cbb90..9789247 100644 --- a/pdf-umbenenner-adapter-out/src/main/java/de/gecheckt/pdf/umbenenner/adapter/out/sqlite/SqliteDocumentRecordRepositoryAdapter.java +++ b/pdf-umbenenner-adapter-out/src/main/java/de/gecheckt/pdf/umbenenner/adapter/out/sqlite/SqliteDocumentRecordRepositoryAdapter.java @@ -6,6 +6,9 @@ import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.time.Instant; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; import java.util.Objects; import org.apache.logging.log4j.LogManager; @@ -286,13 +289,37 @@ public class SqliteDocumentRecordRepositoryAdapter implements DocumentRecordRepo } /** - * Converts a string representation back to an Instant. + * Konvertiert eine String-Darstellung zurück zu einem Instant. + *

+ * Unterstützt zwei Datumsformate für Rückwärtskompatibilität: + *

* - * @param stringValue the ISO-8601 string representation, may be null - * @return the parsed Instant, or null if stringValue is null or blank + * @param stringValue die String-Darstellung des Datums, kann null sein + * @return das geparste Instant, oder null wenn stringValue null oder leer ist */ private Instant stringToInstant(String stringValue) { - return stringValue != null && !stringValue.isBlank() ? Instant.parse(stringValue) : null; + if (stringValue == null || stringValue.isBlank()) { + return null; + } + + // Versuch mit ISO-8601 Format (moderner Standard) + try { + return Instant.parse(stringValue); + } catch (Exception e) { + // Fallback auf älteres Format "yyyy-MM-dd HH:mm:ss" (als UTC) + try { + LocalDateTime dateTime = LocalDateTime.parse(stringValue, + DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + return dateTime.atZone(ZoneId.of("UTC")).toInstant(); + } catch (Exception fallbackException) { + logger.warn("Fehler beim Parsen der Instant-String '{}' in beiden Formaten (ISO-8601 und Legacy-Format)", + stringValue, fallbackException); + return null; + } + } } /**