mirror of
https://github.com/alibaba/canal.git
synced 2026-11-04 00:30:15 +08:00
fixed #1538
This commit is contained in:
@@ -5,6 +5,7 @@ import java.math.BigInteger;
|
|||||||
import java.sql.*;
|
import java.sql.*;
|
||||||
|
|
||||||
import org.joda.time.DateTime;
|
import org.joda.time.DateTime;
|
||||||
|
import org.joda.time.DateTimeZone;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
@@ -116,7 +117,7 @@ public class JdbcTypeUtil {
|
|||||||
case Types.DATE:
|
case Types.DATE:
|
||||||
if (!value.startsWith("0000-00-00")) {
|
if (!value.startsWith("0000-00-00")) {
|
||||||
value = value.trim().replace(" ", "T");
|
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());
|
res = new Date(dt.toDate().getTime());
|
||||||
} else {
|
} else {
|
||||||
res = null;
|
res = null;
|
||||||
@@ -124,13 +125,13 @@ public class JdbcTypeUtil {
|
|||||||
break;
|
break;
|
||||||
case Types.TIME:
|
case Types.TIME:
|
||||||
value = "T" + value;
|
value = "T" + value;
|
||||||
DateTime dt = new DateTime(value);
|
DateTime dt = new DateTime(value, DateTimeZone.forID("+08:00"));
|
||||||
res = new Time(dt.toDate().getTime());
|
res = new Time(dt.toDate().getTime());
|
||||||
break;
|
break;
|
||||||
case Types.TIMESTAMP:
|
case Types.TIMESTAMP:
|
||||||
if (!value.startsWith("0000-00-00")) {
|
if (!value.startsWith("0000-00-00")) {
|
||||||
value = value.trim().replace(" ", "T");
|
value = value.trim().replace(" ", "T");
|
||||||
dt = new DateTime(value);
|
dt = new DateTime(value, DateTimeZone.forID("+08:00"));
|
||||||
res = new Timestamp(dt.toDate().getTime());
|
res = new Timestamp(dt.toDate().getTime());
|
||||||
} else {
|
} else {
|
||||||
res = null;
|
res = null;
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import javax.sql.DataSource;
|
|||||||
|
|
||||||
import org.apache.commons.codec.binary.Base64;
|
import org.apache.commons.codec.binary.Base64;
|
||||||
import org.joda.time.DateTime;
|
import org.joda.time.DateTime;
|
||||||
|
import org.joda.time.DateTimeZone;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
@@ -103,14 +104,14 @@ public class ESSyncUtil {
|
|||||||
}
|
}
|
||||||
} else if ("date".equals(esType)) {
|
} else if ("date".equals(esType)) {
|
||||||
if (val instanceof java.sql.Time) {
|
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) {
|
if (dateTime.getMillisOfSecond() != 0) {
|
||||||
res = dateTime.toString("HH:mm:ss.SSS");
|
res = dateTime.toString("HH:mm:ss.SSS");
|
||||||
} else {
|
} else {
|
||||||
res = dateTime.toString("HH:mm:ss");
|
res = dateTime.toString("HH:mm:ss");
|
||||||
}
|
}
|
||||||
} else if (val instanceof java.sql.Timestamp) {
|
} 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) {
|
if (dateTime.getMillisOfSecond() != 0) {
|
||||||
res = dateTime.toString("yyyy-MM-dd'T'HH:mm:ss.SSS+08:00");
|
res = dateTime.toString("yyyy-MM-dd'T'HH:mm:ss.SSS+08:00");
|
||||||
} else {
|
} else {
|
||||||
@@ -119,9 +120,9 @@ public class ESSyncUtil {
|
|||||||
} else if (val instanceof java.sql.Date || val instanceof Date) {
|
} else if (val instanceof java.sql.Date || val instanceof Date) {
|
||||||
DateTime dateTime;
|
DateTime dateTime;
|
||||||
if (val instanceof java.sql.Date) {
|
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 {
|
} 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
|
if (dateTime.getHourOfDay() == 0 && dateTime.getMinuteOfHour() == 0 && dateTime.getSecondOfMinute() == 0
|
||||||
&& dateTime.getMillisOfSecond() == 0) {
|
&& dateTime.getMillisOfSecond() == 0) {
|
||||||
@@ -134,7 +135,7 @@ public class ESSyncUtil {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (val instanceof Long) {
|
} 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
|
if (dateTime.getHourOfDay() == 0 && dateTime.getMinuteOfHour() == 0 && dateTime.getSecondOfMinute() == 0
|
||||||
&& dateTime.getMillisOfSecond() == 0) {
|
&& dateTime.getMillisOfSecond() == 0) {
|
||||||
res = dateTime.toString("yyyy-MM-dd");
|
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) == ' '
|
if (v.length() > 18 && v.charAt(4) == '-' && v.charAt(7) == '-' && v.charAt(10) == ' '
|
||||||
&& v.charAt(13) == ':' && v.charAt(16) == ':') {
|
&& v.charAt(13) == ':' && v.charAt(16) == ':') {
|
||||||
String dt = v.substring(0, 10) + "T" + v.substring(11);
|
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) {
|
if (dateTime.getMillisOfSecond() != 0) {
|
||||||
res = dateTime.toString("yyyy-MM-dd'T'HH:mm:ss.SSS+08:00");
|
res = dateTime.toString("yyyy-MM-dd'T'HH:mm:ss.SSS+08:00");
|
||||||
} else {
|
} else {
|
||||||
res = dateTime.toString("yyyy-MM-dd'T'HH:mm:ss+08:00");
|
res = dateTime.toString("yyyy-MM-dd'T'HH:mm:ss+08:00");
|
||||||
}
|
}
|
||||||
} else if (v.length() == 10 && v.charAt(4) == '-' && v.charAt(7) == '-') {
|
} 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");
|
res = dateTime.toString("yyyy-MM-dd");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import org.apache.hadoop.hbase.util.Bytes;
|
|||||||
import org.joda.time.DateTime;
|
import org.joda.time.DateTime;
|
||||||
|
|
||||||
import com.google.common.math.LongMath;
|
import com.google.common.math.LongMath;
|
||||||
|
import org.joda.time.DateTimeZone;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Phoenix类型转换工具类
|
* Phoenix类型转换工具类
|
||||||
@@ -608,12 +609,12 @@ public class PhTypeUtil {
|
|||||||
Date date = null;
|
Date date = null;
|
||||||
int len = dateStr.length();
|
int len = dateStr.length();
|
||||||
if (len == 10 && dateStr.charAt(4) == '-' && dateStr.charAt(7) == '-') {
|
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) == ':') {
|
} 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) == ':'
|
} else if (len >= 19 && dateStr.charAt(4) == '-' && dateStr.charAt(7) == '-' && dateStr.charAt(13) == ':'
|
||||||
&& dateStr.charAt(16) == ':') {
|
&& dateStr.charAt(16) == ':') {
|
||||||
date = new DateTime(dateStr.replace(" ", "T")).toDate();
|
date = new DateTime(dateStr.replace(" ", "T"), DateTimeZone.forID("+08:00")).toDate();
|
||||||
}
|
}
|
||||||
return date;
|
return date;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import org.apache.commons.lang.StringUtils;
|
|||||||
import org.joda.time.DateTime;
|
import org.joda.time.DateTime;
|
||||||
|
|
||||||
import com.alibaba.otter.canal.client.adapter.rdb.config.MappingConfig;
|
import com.alibaba.otter.canal.client.adapter.rdb.config.MappingConfig;
|
||||||
|
import org.joda.time.DateTimeZone;
|
||||||
|
|
||||||
public class SyncUtil {
|
public class SyncUtil {
|
||||||
|
|
||||||
@@ -197,7 +198,7 @@ public class SyncUtil {
|
|||||||
String v = (String) value;
|
String v = (String) value;
|
||||||
if (!v.startsWith("0000-00-00")) {
|
if (!v.startsWith("0000-00-00")) {
|
||||||
v = v.trim().replace(" ", "T");
|
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()));
|
pstmt.setDate(i, new Date(dt.toDate().getTime()));
|
||||||
} else {
|
} else {
|
||||||
pstmt.setNull(i, type);
|
pstmt.setNull(i, type);
|
||||||
@@ -214,7 +215,7 @@ public class SyncUtil {
|
|||||||
} else if (value instanceof String) {
|
} else if (value instanceof String) {
|
||||||
String v = (String) value;
|
String v = (String) value;
|
||||||
v = "T" + v;
|
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()));
|
pstmt.setTime(i, new Time(dt.toDate().getTime()));
|
||||||
} else {
|
} else {
|
||||||
pstmt.setNull(i, type);
|
pstmt.setNull(i, type);
|
||||||
@@ -229,7 +230,7 @@ public class SyncUtil {
|
|||||||
String v = (String) value;
|
String v = (String) value;
|
||||||
if (!v.startsWith("0000-00-00")) {
|
if (!v.startsWith("0000-00-00")) {
|
||||||
v = v.trim().replace(" ", "T");
|
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()));
|
pstmt.setTimestamp(i, new Timestamp(dt.toDate().getTime()));
|
||||||
} else {
|
} else {
|
||||||
pstmt.setNull(i, type);
|
pstmt.setNull(i, type);
|
||||||
|
|||||||
Reference in New Issue
Block a user