mirror of
https://github.com/alibaba/canal.git
synced 2026-11-04 00:30:15 +08:00
fixed #1538
This commit is contained in:
@@ -4,8 +4,6 @@ import java.math.BigDecimal;
|
||||
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,23 +114,33 @@ public class JdbcTypeUtil {
|
||||
break;
|
||||
case Types.DATE:
|
||||
if (!value.startsWith("0000-00-00")) {
|
||||
value = value.trim().replace(" ", "T");
|
||||
DateTime dt = new DateTime(value, DateTimeZone.forID("+08:00"));
|
||||
res = new Date(dt.toDate().getTime());
|
||||
java.util.Date date = Util.parseDate(value);
|
||||
if (date != null) {
|
||||
res = new Date(date.getTime());
|
||||
} else {
|
||||
res = null;
|
||||
}
|
||||
} else {
|
||||
res = null;
|
||||
}
|
||||
break;
|
||||
case Types.TIME:
|
||||
value = "T" + value;
|
||||
DateTime dt = new DateTime(value, DateTimeZone.forID("+08:00"));
|
||||
res = new Time(dt.toDate().getTime());
|
||||
case Types.TIME: {
|
||||
java.util.Date date = Util.parseDate(value);
|
||||
if (date != null) {
|
||||
res = new Time(date.getTime());
|
||||
} else {
|
||||
res = null;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case Types.TIMESTAMP:
|
||||
if (!value.startsWith("0000-00-00")) {
|
||||
value = value.trim().replace(" ", "T");
|
||||
dt = new DateTime(value, DateTimeZone.forID("+08:00"));
|
||||
res = new Timestamp(dt.toDate().getTime());
|
||||
java.util.Date date = Util.parseDate(value);
|
||||
if (date != null) {
|
||||
res = new Timestamp(date.getTime());
|
||||
} else {
|
||||
res = null;
|
||||
}
|
||||
} else {
|
||||
res = null;
|
||||
}
|
||||
|
||||
@@ -6,12 +6,15 @@ import java.sql.Connection;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.sql.Statement;
|
||||
import java.util.Date;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Function;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.joda.time.DateTime;
|
||||
import org.joda.time.DateTimeZone;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
@@ -136,4 +139,36 @@ public class Util {
|
||||
|
||||
return column;
|
||||
}
|
||||
|
||||
/**
|
||||
* 通用日期时间字符解析
|
||||
*
|
||||
* @param datetimeStr 日期时间字符串
|
||||
* @return Date
|
||||
*/
|
||||
public static Date parseDate(String datetimeStr) {
|
||||
if (StringUtils.isEmpty(datetimeStr)) {
|
||||
return null;
|
||||
}
|
||||
datetimeStr = datetimeStr.trim();
|
||||
if (datetimeStr.contains("-")) {
|
||||
if (datetimeStr.contains(":")) {
|
||||
datetimeStr = datetimeStr.replace(" ", "T");
|
||||
}
|
||||
} else if (datetimeStr.contains(":")) {
|
||||
datetimeStr = "T" + datetimeStr;
|
||||
}
|
||||
|
||||
DateTime dateTime;
|
||||
if (datetimeStr.startsWith("1940-06-03") || datetimeStr.startsWith("1941-03-16")
|
||||
|| datetimeStr.startsWith("1986-05-04") || datetimeStr.startsWith("1987-04-12")
|
||||
|| datetimeStr.startsWith("1988-04-10") || datetimeStr.startsWith("1989-04-16")
|
||||
|| datetimeStr.startsWith("1990-04-15") || datetimeStr.startsWith("1991-04-14")) {
|
||||
dateTime = new DateTime(datetimeStr, DateTimeZone.forID("+08:00"));
|
||||
} else {
|
||||
dateTime = new DateTime(datetimeStr);
|
||||
}
|
||||
|
||||
return dateTime.toDate();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user