This commit is contained in:
mcy
2019-02-28 17:29:06 +08:00
parent f21abc13af
commit e7f069850f
5 changed files with 98 additions and 53 deletions

View File

@@ -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;
}

View File

@@ -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();
}
}