diff --git a/client-adapter/common/src/main/java/com/alibaba/otter/canal/client/adapter/support/JdbcTypeUtil.java b/client-adapter/common/src/main/java/com/alibaba/otter/canal/client/adapter/support/JdbcTypeUtil.java index c24ff7de..6843665b 100644 --- a/client-adapter/common/src/main/java/com/alibaba/otter/canal/client/adapter/support/JdbcTypeUtil.java +++ b/client-adapter/common/src/main/java/com/alibaba/otter/canal/client/adapter/support/JdbcTypeUtil.java @@ -5,6 +5,7 @@ import java.math.BigInteger; import java.sql.*; import org.joda.time.DateTime; +import org.joda.time.DateTimeZone; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -116,7 +117,7 @@ public class JdbcTypeUtil { case Types.DATE: if (!value.startsWith("0000-00-00")) { value = value.trim().replace(" ", "T"); - DateTime dt = new DateTime(value); + DateTime dt = new DateTime(value, DateTimeZone.forID("+08:00")); res = new Date(dt.toDate().getTime()); } else { res = null; @@ -124,13 +125,13 @@ public class JdbcTypeUtil { break; case Types.TIME: value = "T" + value; - DateTime dt = new DateTime(value); + DateTime dt = new DateTime(value, DateTimeZone.forID("+08:00")); res = new Time(dt.toDate().getTime()); break; case Types.TIMESTAMP: if (!value.startsWith("0000-00-00")) { value = value.trim().replace(" ", "T"); - dt = new DateTime(value); + dt = new DateTime(value, DateTimeZone.forID("+08:00")); res = new Timestamp(dt.toDate().getTime()); } else { res = null; diff --git a/client-adapter/elasticsearch/src/main/java/com/alibaba/otter/canal/client/adapter/es/support/ESSyncUtil.java b/client-adapter/elasticsearch/src/main/java/com/alibaba/otter/canal/client/adapter/es/support/ESSyncUtil.java index cf8f8fd4..74ca70cd 100644 --- a/client-adapter/elasticsearch/src/main/java/com/alibaba/otter/canal/client/adapter/es/support/ESSyncUtil.java +++ b/client-adapter/elasticsearch/src/main/java/com/alibaba/otter/canal/client/adapter/es/support/ESSyncUtil.java @@ -12,6 +12,7 @@ import javax.sql.DataSource; import org.apache.commons.codec.binary.Base64; import org.joda.time.DateTime; +import org.joda.time.DateTimeZone; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -103,14 +104,14 @@ public class ESSyncUtil { } } else if ("date".equals(esType)) { if (val instanceof java.sql.Time) { - DateTime dateTime = new DateTime(((java.sql.Time) val).getTime()); + DateTime dateTime = new DateTime(((java.sql.Time) val).getTime(), DateTimeZone.forID("+08:00")); if (dateTime.getMillisOfSecond() != 0) { res = dateTime.toString("HH:mm:ss.SSS"); } else { res = dateTime.toString("HH:mm:ss"); } } else if (val instanceof java.sql.Timestamp) { - DateTime dateTime = new DateTime(((java.sql.Timestamp) val).getTime()); + DateTime dateTime = new DateTime(((java.sql.Timestamp) val).getTime(), DateTimeZone.forID("+08:00")); if (dateTime.getMillisOfSecond() != 0) { res = dateTime.toString("yyyy-MM-dd'T'HH:mm:ss.SSS+08:00"); } else { @@ -119,9 +120,9 @@ public class ESSyncUtil { } else if (val instanceof java.sql.Date || val instanceof Date) { DateTime dateTime; if (val instanceof java.sql.Date) { - dateTime = new DateTime(((java.sql.Date) val).getTime()); + dateTime = new DateTime(((java.sql.Date) val).getTime(), DateTimeZone.forID("+08:00")); } else { - dateTime = new DateTime(((Date) val).getTime()); + dateTime = new DateTime(((Date) val).getTime(), DateTimeZone.forID("+08:00")); } if (dateTime.getHourOfDay() == 0 && dateTime.getMinuteOfHour() == 0 && dateTime.getSecondOfMinute() == 0 && dateTime.getMillisOfSecond() == 0) { @@ -134,7 +135,7 @@ public class ESSyncUtil { } } } else if (val instanceof Long) { - DateTime dateTime = new DateTime(((Long) val).longValue()); + DateTime dateTime = new DateTime(((Long) val).longValue(), DateTimeZone.forID("+08:00")); if (dateTime.getHourOfDay() == 0 && dateTime.getMinuteOfHour() == 0 && dateTime.getSecondOfMinute() == 0 && dateTime.getMillisOfSecond() == 0) { res = dateTime.toString("yyyy-MM-dd"); @@ -148,14 +149,14 @@ public class ESSyncUtil { if (v.length() > 18 && v.charAt(4) == '-' && v.charAt(7) == '-' && v.charAt(10) == ' ' && v.charAt(13) == ':' && v.charAt(16) == ':') { String dt = v.substring(0, 10) + "T" + v.substring(11); - DateTime dateTime = new DateTime(dt); + DateTime dateTime = new DateTime(dt, DateTimeZone.forID("+08:00")); if (dateTime.getMillisOfSecond() != 0) { res = dateTime.toString("yyyy-MM-dd'T'HH:mm:ss.SSS+08:00"); } else { res = dateTime.toString("yyyy-MM-dd'T'HH:mm:ss+08:00"); } } else if (v.length() == 10 && v.charAt(4) == '-' && v.charAt(7) == '-') { - DateTime dateTime = new DateTime(v); + DateTime dateTime = new DateTime(v, DateTimeZone.forID("+08:00")); res = dateTime.toString("yyyy-MM-dd"); } } @@ -237,7 +238,7 @@ public class ESSyncUtil { /** * 拼接主键条件 - * + * * @param mapping * @param data * @return diff --git a/client-adapter/hbase/src/main/java/com/alibaba/otter/canal/client/adapter/hbase/support/PhTypeUtil.java b/client-adapter/hbase/src/main/java/com/alibaba/otter/canal/client/adapter/hbase/support/PhTypeUtil.java index a3a8e0b9..f738e054 100644 --- a/client-adapter/hbase/src/main/java/com/alibaba/otter/canal/client/adapter/hbase/support/PhTypeUtil.java +++ b/client-adapter/hbase/src/main/java/com/alibaba/otter/canal/client/adapter/hbase/support/PhTypeUtil.java @@ -11,6 +11,7 @@ import org.apache.hadoop.hbase.util.Bytes; import org.joda.time.DateTime; import com.google.common.math.LongMath; +import org.joda.time.DateTimeZone; /** * Phoenix类型转换工具类 @@ -608,12 +609,12 @@ public class PhTypeUtil { Date date = null; int len = dateStr.length(); if (len == 10 && dateStr.charAt(4) == '-' && dateStr.charAt(7) == '-') { - date = new DateTime(dateStr).toDate(); + date = new DateTime(dateStr, DateTimeZone.forID("+08:00")).toDate(); } else if (len == 8 && dateStr.charAt(2) == ':' && dateStr.charAt(5) == ':') { - date = new DateTime("T" + dateStr).toDate(); + date = new DateTime("T" + dateStr, DateTimeZone.forID("+08:00")).toDate(); } else if (len >= 19 && dateStr.charAt(4) == '-' && dateStr.charAt(7) == '-' && dateStr.charAt(13) == ':' && dateStr.charAt(16) == ':') { - date = new DateTime(dateStr.replace(" ", "T")).toDate(); + date = new DateTime(dateStr.replace(" ", "T"), DateTimeZone.forID("+08:00")).toDate(); } return date; } diff --git a/client-adapter/rdb/src/main/java/com/alibaba/otter/canal/client/adapter/rdb/support/SyncUtil.java b/client-adapter/rdb/src/main/java/com/alibaba/otter/canal/client/adapter/rdb/support/SyncUtil.java index 6be006d2..ea1977e9 100644 --- a/client-adapter/rdb/src/main/java/com/alibaba/otter/canal/client/adapter/rdb/support/SyncUtil.java +++ b/client-adapter/rdb/src/main/java/com/alibaba/otter/canal/client/adapter/rdb/support/SyncUtil.java @@ -13,6 +13,7 @@ import org.apache.commons.lang.StringUtils; import org.joda.time.DateTime; import com.alibaba.otter.canal.client.adapter.rdb.config.MappingConfig; +import org.joda.time.DateTimeZone; public class SyncUtil { @@ -86,7 +87,7 @@ public class SyncUtil { } break; case Types.TINYINT: - if (value instanceof Number) { + if (value instanceof Number) { pstmt.setByte(i, ((Number) value).byteValue()); } else if (value instanceof String) { pstmt.setByte(i, Byte.parseByte((String) value)); @@ -197,7 +198,7 @@ public class SyncUtil { String v = (String) value; if (!v.startsWith("0000-00-00")) { v = v.trim().replace(" ", "T"); - DateTime dt = new DateTime(v); + DateTime dt = new DateTime(v, DateTimeZone.forID("+08:00")); pstmt.setDate(i, new Date(dt.toDate().getTime())); } else { pstmt.setNull(i, type); @@ -214,7 +215,7 @@ public class SyncUtil { } else if (value instanceof String) { String v = (String) value; v = "T" + v; - DateTime dt = new DateTime(v); + DateTime dt = new DateTime(v, DateTimeZone.forID("+08:00")); pstmt.setTime(i, new Time(dt.toDate().getTime())); } else { pstmt.setNull(i, type); @@ -229,7 +230,7 @@ public class SyncUtil { String v = (String) value; if (!v.startsWith("0000-00-00")) { v = v.trim().replace(" ", "T"); - DateTime dt = new DateTime(v); + DateTime dt = new DateTime(v, DateTimeZone.forID("+08:00")); pstmt.setTimestamp(i, new Timestamp(dt.toDate().getTime())); } else { pstmt.setNull(i, type);