diff --git a/bundles/org.openhab.persistence.jdbc/src/main/java/org/openhab/persistence/jdbc/db/JdbcBaseDAO.java b/bundles/org.openhab.persistence.jdbc/src/main/java/org/openhab/persistence/jdbc/db/JdbcBaseDAO.java index 7dc19e6d4..ac6194151 100644 --- a/bundles/org.openhab.persistence.jdbc/src/main/java/org/openhab/persistence/jdbc/db/JdbcBaseDAO.java +++ b/bundles/org.openhab.persistence.jdbc/src/main/java/org/openhab/persistence/jdbc/db/JdbcBaseDAO.java @@ -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) { diff --git a/bundles/org.openhab.persistence.jdbc/src/test/java/org/openhab/persistence/jdbc/db/JdbcBaseDAOTest.java b/bundles/org.openhab.persistence.jdbc/src/test/java/org/openhab/persistence/jdbc/db/JdbcBaseDAOTest.java index 019b1271c..79551fcef 100644 --- a/bundles/org.openhab.persistence.jdbc/src/test/java/org/openhab/persistence/jdbc/db/JdbcBaseDAOTest.java +++ b/bundles/org.openhab.persistence.jdbc/src/test/java/org/openhab/persistence/jdbc/db/JdbcBaseDAOTest.java @@ -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")));