]> git.basschouten.com Git - openhab-addons.git/commitdiff
Fix ClassCastException for LocalDateTime (#13425)
authorJacob Laursen <jacob-github@vindvejr.dk>
Wed, 21 Sep 2022 17:10:02 +0000 (19:10 +0200)
committerGitHub <noreply@github.com>
Wed, 21 Sep 2022 17:10:02 +0000 (19:10 +0200)
Signed-off-by: Jacob Laursen <jacob-github@vindvejr.dk>
bundles/org.openhab.persistence.jdbc/src/main/java/org/openhab/persistence/jdbc/db/JdbcBaseDAO.java
bundles/org.openhab.persistence.jdbc/src/test/java/org/openhab/persistence/jdbc/db/JdbcBaseDAOTest.java

index 7dc19e6d4ca5234cd912bbc387eae0e0494a61e0..ac6194151cc3dad210b04bc61e1484cf1c56d688 100644 (file)
@@ -583,8 +583,14 @@ public class JdbcBaseDAO {
             return ((Number) v).longValue();
         } else if (v instanceof java.sql.Date) {
             return ((java.sql.Date) v).getTime();
+        } else if (v instanceof LocalDateTime) {
+            return ((LocalDateTime) v).atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
+        } else if (v instanceof Instant) {
+            return ((Instant) v).toEpochMilli();
+        } else if (v instanceof java.sql.Timestamp) {
+            return ((java.sql.Timestamp) v).getTime();
         }
-        return ((java.sql.Timestamp) v).getTime();
+        throw new UnsupportedOperationException("Date of type " + v.getClass().getName() + " is not supported");
     }
 
     protected Integer objectAsInteger(Object v) {
index 019b1271cad7d3b292dd4958c1c2bdfeff40edfb..79551fcef414a4f1ae538d45578721224552341d 100644 (file)
@@ -89,6 +89,11 @@ public class JdbcBaseDAOTest {
         assertInstanceOf(DateTimeType.class, dateTimeType);
         assertThat(dateTimeType, is(DateTimeType.valueOf("2021-02-01T23:30:02.049")));
 
+        dateTimeType = jdbcBaseDAO.objectAsState(new DateTimeItem("testDateTimeItem"), null,
+                LocalDateTime.parse("2021-02-01T23:30:02.049"));
+        assertInstanceOf(DateTimeType.class, dateTimeType);
+        assertThat(dateTimeType, is(DateTimeType.valueOf("2021-02-01T23:30:02.049")));
+
         State hsbType = jdbcBaseDAO.objectAsState(new ColorItem("testColorItem"), null, "184,100,52");
         assertInstanceOf(HSBType.class, hsbType);
         assertThat(hsbType, is(HSBType.valueOf("184,100,52")));