diff --git a/jOOQ/src/main/java/org/jooq/impl/Convert.java b/jOOQ/src/main/java/org/jooq/impl/Convert.java index 5fccaede42..9b69b75276 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Convert.java +++ b/jOOQ/src/main/java/org/jooq/impl/Convert.java @@ -928,7 +928,7 @@ final class Convert { // [#1501] Strings can be converted to java.sql.Date else if (fromClass == String.class && toClass == java.sql.Timestamp.class) { try { - return (U) java.sql.Timestamp.valueOf((String) from); + return (U) java.sql.Timestamp.valueOf(patchIso8601((String) from, false)); } catch (IllegalArgumentException e) { return null; @@ -983,18 +983,11 @@ final class Convert { } else if (fromClass == String.class && toClass == LocalDateTime.class) { - - // Try "lenient" ISO date formats first try { - return (U) java.sql.Timestamp.valueOf((String) from).toLocalDateTime(); + return (U) LocalDateTime.parse(patchIso8601((String) from, true)); } - catch (IllegalArgumentException e1) { - try { - return (U) LocalDateTime.parse((String) from); - } - catch (DateTimeParseException e2) { - return null; - } + catch (DateTimeParseException e2) { + return null; } } @@ -1213,6 +1206,15 @@ final class Convert { throw fail(from, toClass); } + private static final String patchIso8601(String string, boolean t) { + if (t && string.charAt(10) == ' ') + return string.substring(0, 10) + "T" + string.substring(11); + else if (!t && string.charAt(10) == 'T') + return string.substring(0, 10) + " " + string.substring(11); + else + return string; + } + @Override public Object to(U to) { return to; diff --git a/jOOQ/src/main/java/org/jooq/tools/Convert.java b/jOOQ/src/main/java/org/jooq/tools/Convert.java index 87b2be5999..fc45c85d4b 100644 --- a/jOOQ/src/main/java/org/jooq/tools/Convert.java +++ b/jOOQ/src/main/java/org/jooq/tools/Convert.java @@ -920,7 +920,7 @@ public final class Convert { // [#1501] Strings can be converted to java.sql.Date else if (fromClass == String.class && toClass == java.sql.Timestamp.class) { try { - return (U) java.sql.Timestamp.valueOf((String) from); + return (U) java.sql.Timestamp.valueOf(patchIso8601((String) from, false)); } catch (IllegalArgumentException e) { return null; @@ -975,18 +975,11 @@ public final class Convert { } else if (fromClass == String.class && toClass == LocalDateTime.class) { - - // Try "lenient" ISO date formats first try { - return (U) java.sql.Timestamp.valueOf((String) from).toLocalDateTime(); + return (U) LocalDateTime.parse(patchIso8601((String) from, true)); } - catch (IllegalArgumentException e1) { - try { - return (U) LocalDateTime.parse((String) from); - } - catch (DateTimeParseException e2) { - return null; - } + catch (DateTimeParseException e2) { + return null; } } @@ -1205,6 +1198,15 @@ public final class Convert { throw fail(from, toClass); } + private static final String patchIso8601(String string, boolean t) { + if (t && string.charAt(10) == ' ') + return string.substring(0, 10) + "T" + string.substring(11); + else if (!t && string.charAt(10) == 'T') + return string.substring(0, 10) + " " + string.substring(11); + else + return string; + } + @Override public Object to(U to) { return to;