瀏覽代碼

修复逻辑

life 1 年之前
父節點
當前提交
5ba1f66ba6

+ 33 - 9
dbsyncer-common/src/main/java/org/dbsyncer/common/util/DateFormatUtil.java

@@ -28,15 +28,18 @@ public abstract class DateFormatUtil {
     /**
      * yyyy-MM-dd HH:mm:ss
      */
-    public static final DateTimeFormatter CHINESE_STANDARD_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+    public static final DateTimeFormatter CHINESE_STANDARD_TIME_FORMATTER = DateTimeFormatter.ofPattern(
+            "yyyy-MM-dd HH:mm:ss");
     /**
      * yyyy-MM-dd'T'HH:mm:ss.SSSz
      */
-    public static final DateFormat GMT_FORMATTER = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSz");
+    public static final DateFormat GMT_FORMATTER = new SimpleDateFormat(
+            "yyyy-MM-dd'T'HH:mm:ss.SSSz");
     /**
      * yyyy-MM-dd
      */
-    public static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+    public static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern(
+            "yyyy-MM-dd");
     /**
      * HH:mm:ss
      */
@@ -89,6 +92,14 @@ public abstract class DateFormatUtil {
             .optionalEnd()
             .toFormatter();
 
+    private static final DateTimeFormatter TS_TZ_FORMAT_ORACLE = new DateTimeFormatterBuilder()
+            .append(NON_ISO_LOCAL_DATE)
+            .appendLiteral(' ')
+            .append(DateTimeFormatter.ISO_LOCAL_TIME)
+            .appendLiteral(' ')
+            .appendOffset("+HH:mm", "")
+            .toFormatter();
+
     public static String getCurrentTime() {
         return LocalDateTime.now().format(TIME_FORMATTER);
     }
@@ -98,7 +109,8 @@ public abstract class DateFormatUtil {
     }
 
     public static String dateToString(java.util.Date date) {
-        return date.toInstant().atZone(zoneId).toLocalDateTime().format(CHINESE_STANDARD_TIME_FORMATTER);
+        return date.toInstant().atZone(zoneId).toLocalDateTime()
+                .format(CHINESE_STANDARD_TIME_FORMATTER);
     }
 
     public static Date stringToDate(String s) {
@@ -117,18 +129,21 @@ public abstract class DateFormatUtil {
         try {
             // 2020-7-12 00:00:00
             if (s.length() < 19) {
-                return Timestamp.valueOf(LocalDateTime.from(CHINESE_STANDARD_TIME_FORMATTER.parse(format(s))));
+                return Timestamp.valueOf(
+                        LocalDateTime.from(CHINESE_STANDARD_TIME_FORMATTER.parse(format(s))));
             }
 
             // 2020-07-12 00:00:00
             if (s.length() == 19) {
-                return Timestamp.valueOf(LocalDateTime.from(CHINESE_STANDARD_TIME_FORMATTER.parse(s)));
+                return Timestamp.valueOf(
+                        LocalDateTime.from(CHINESE_STANDARD_TIME_FORMATTER.parse(s)));
             }
 
             // 2020-07-12 00:00:00.0
             if (s.length() == 21) {
                 s = s.substring(0, s.lastIndexOf("."));
-                return Timestamp.valueOf(LocalDateTime.from(CHINESE_STANDARD_TIME_FORMATTER.parse(s)));
+                return Timestamp.valueOf(
+                        LocalDateTime.from(CHINESE_STANDARD_TIME_FORMATTER.parse(s)));
             }
 
             // 2022-07-21T05:35:34.000+0800
@@ -148,12 +163,15 @@ public abstract class DateFormatUtil {
         }
     }
 
-    public static Timestamp stringToTimestamp(String s, DateFormat formatter) throws ParseException {
+    public static Timestamp stringToTimestamp(String s, DateFormat formatter)
+            throws ParseException {
         return new Timestamp(formatter.parse(s).getTime());
     }
 
     public static Timestamp timeWithoutTimeZoneToTimestamp(String s) {
-        return Timestamp.valueOf(LocalDateTime.from(DateFormatUtil.TS_FORMAT.parse(s)).atZone(ZoneOffset.UTC).toLocalDateTime());
+        return Timestamp.valueOf(
+                LocalDateTime.from(DateFormatUtil.TS_FORMAT.parse(s)).atZone(ZoneOffset.UTC)
+                        .toLocalDateTime());
     }
 
     public static OffsetTime timeWithTimeZone(String s) {
@@ -170,6 +188,12 @@ public abstract class DateFormatUtil {
         return OffsetDateTime.from(parsedTimestamp).withOffsetSameInstant(ZoneOffset.UTC);
     }
 
+    public static OffsetDateTime timestampWithTimeZoneToOffsetDateTimeOracle(String s) {
+        TemporalAccessor parsedTimestamp;
+        parsedTimestamp = TS_TZ_FORMAT_ORACLE.parse(s);
+        return OffsetDateTime.from(parsedTimestamp).withOffsetSameInstant(ZoneOffset.UTC);
+    }
+
     private static String format(String s) {
         StringBuilder buf = new StringBuilder();
         Lexer lexer = new Lexer(s);

+ 4 - 1
dbsyncer-connector/dbsyncer-connector-oracle/src/main/java/org/dbsyncer/connector/oracle/logminer/parser/OracleColumnValue.java

@@ -56,6 +56,9 @@ public class OracleColumnValue extends AbstractColumnValue<Expression> {
 
     @Override
     public String asString() {
+        if (getValue() instanceof StringValue){
+            return ((StringValue) getValue()).getValue();
+        }
         return Objects.toString(getValue());
     }
 
@@ -175,7 +178,7 @@ public class OracleColumnValue extends AbstractColumnValue<Expression> {
     }
 
     private OffsetDateTime toOffsetDateTime(Object value) {
-        return DateFormatUtil.timestampWithTimeZoneToOffsetDateTime(Objects.toString(value));
+        return DateFormatUtil.timestampWithTimeZoneToOffsetDateTimeOracle(Objects.toString(value));
     }
 
     interface ColumnValueFunction<R> {