diff --git a/symmetric-db/src/main/java/org/jumpmind/db/sql/LogSqlBuilder.java b/symmetric-db/src/main/java/org/jumpmind/db/sql/LogSqlBuilder.java index 2f683005e8..d98f1ac688 100644 --- a/symmetric-db/src/main/java/org/jumpmind/db/sql/LogSqlBuilder.java +++ b/symmetric-db/src/main/java/org/jumpmind/db/sql/LogSqlBuilder.java @@ -24,6 +24,8 @@ import java.nio.charset.Charset; import java.sql.Blob; import java.sql.SQLException; +import java.sql.Time; +import java.sql.Timestamp; import java.sql.Types; import java.util.Arrays; import java.util.Date; @@ -165,9 +167,19 @@ protected String formatDateTimeValue(Object object, int type) { } } } - if (type == Types.TIME) { + if (object instanceof Timestamp) { + if (type == Types.TIME) { + return (useJdbcTimestampFormat ? "{t " : "") + + "'" + FormatUtils.TIME9_FORMATTER.format(((Timestamp) object).toInstant()) + "'" + + (useJdbcTimestampFormat ? "}" : ""); + } return (useJdbcTimestampFormat ? "{ts " : "") - + "'" + FormatUtils.TIME_FORMATTER.format(date) + "'" + + "'" + FormatUtils.TIMESTAMP9_FORMATTER.format(((Timestamp) object).toInstant()) + "'" + + (useJdbcTimestampFormat ? "}" : ""); + + } else if (object instanceof Time) { + return (useJdbcTimestampFormat ? "{t " : "") + + "'" + FormatUtils.TIME9_FORMATTER.format(((Time) object).toInstant()) + "'" + (useJdbcTimestampFormat ? "}" : ""); } else { return (useJdbcTimestampFormat ? "{ts " : "") diff --git a/symmetric-util/src/main/java/org/jumpmind/util/FormatUtils.java b/symmetric-util/src/main/java/org/jumpmind/util/FormatUtils.java index 3add677364..ddae5708ed 100644 --- a/symmetric-util/src/main/java/org/jumpmind/util/FormatUtils.java +++ b/symmetric-util/src/main/java/org/jumpmind/util/FormatUtils.java @@ -23,6 +23,8 @@ import java.sql.Timestamp; import java.text.ParsePosition; import java.text.SimpleDateFormat; +import java.time.ZoneId; +import java.time.ZoneOffset; import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeParseException; @@ -53,7 +55,10 @@ public final class FormatUtils { }; public static final FastDateFormat TIMESTAMP_FORMATTER = FastDateFormat .getInstance("yyyy-MM-dd HH:mm:ss.SSS"); + public static final DateTimeFormatter TIMESTAMP9_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.nnnnnnnnn").withZone(ZoneId.from( + ZoneOffset.UTC)); public static final FastDateFormat TIME_FORMATTER = FastDateFormat.getInstance("HH:mm:ss.SSS"); + public static final DateTimeFormatter TIME9_FORMATTER = DateTimeFormatter.ofPattern("HH:mm:ss.nnnnnnnnn").withZone(ZoneId.from(ZoneOffset.UTC)); /* special characters for wildcard triggers */ public final static String WILDCARD = "*"; public final static String WILDCARD_SEPARATOR = ",";