diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/convert/impl/DateConverter.java b/hutool-core/src/main/java/org/dromara/hutool/core/convert/impl/DateConverter.java
index 9dda76030..ed90960c9 100644
--- a/hutool-core/src/main/java/org/dromara/hutool/core/convert/impl/DateConverter.java
+++ b/hutool-core/src/main/java/org/dromara/hutool/core/convert/impl/DateConverter.java
@@ -16,6 +16,7 @@ import org.dromara.hutool.core.convert.AbstractConverter;
import org.dromara.hutool.core.convert.ConvertException;
import org.dromara.hutool.core.date.DateTime;
import org.dromara.hutool.core.date.DateUtil;
+import org.dromara.hutool.core.date.SqlDateUtil;
import org.dromara.hutool.core.text.StrUtil;
import java.time.temporal.TemporalAccessor;
@@ -88,8 +89,8 @@ public class DateConverter extends AbstractConverter {
// 统一按照字符串处理
final String valueStr = convertToStr(value);
final DateTime dateTime = StrUtil.isBlank(this.format) //
- ? DateUtil.parse(valueStr) //
- : DateUtil.parse(valueStr, this.format);
+ ? DateUtil.parse(valueStr) //
+ : DateUtil.parse(valueStr, this.format);
if (null != dateTime) {
return wrap(targetClass, dateTime);
}
@@ -117,7 +118,14 @@ public class DateConverter extends AbstractConverter {
}
/**
- * java.util.Date转为子类型
+ * 时间戳转为子类型,支持:
+ *
+ * - {@link java.util.Date}
+ * - {@link DateTime}
+ * - {@link java.sql.Date}
+ * - {@link java.sql.Time}
+ * - {@link java.sql.Timestamp}
+ *
*
* @param mills Date
* @return 目标类型对象
@@ -130,16 +138,7 @@ public class DateConverter extends AbstractConverter {
if (DateTime.class == targetClass) {
return DateUtil.date(mills);
}
- if (java.sql.Date.class == targetClass) {
- return new java.sql.Date(mills);
- }
- if (java.sql.Time.class == targetClass) {
- return new java.sql.Time(mills);
- }
- if (java.sql.Timestamp.class == targetClass) {
- return new java.sql.Timestamp(mills);
- }
- throw new UnsupportedOperationException(StrUtil.format("Unsupported target Date type: {}", targetClass.getName()));
+ return SqlDateUtil.wrap(targetClass, mills);
}
}
diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/date/SqlDateUtil.java b/hutool-core/src/main/java/org/dromara/hutool/core/date/SqlDateUtil.java
index 1b87731da..8a24d9dd1 100755
--- a/hutool-core/src/main/java/org/dromara/hutool/core/date/SqlDateUtil.java
+++ b/hutool-core/src/main/java/org/dromara/hutool/core/date/SqlDateUtil.java
@@ -13,6 +13,7 @@
package org.dromara.hutool.core.date;
import org.dromara.hutool.core.lang.Assert;
+import org.dromara.hutool.core.text.StrUtil;
import java.sql.Timestamp;
import java.util.Date;
@@ -32,7 +33,7 @@ public class SqlDateUtil {
* @param date 日期时间,非空
* @return {@link Timestamp}
*/
- public static Timestamp timestamp(final Date date) {
+ public static Timestamp timestamp(final java.util.Date date) {
Assert.notNull(date);
return new Timestamp(date.getTime());
}
@@ -44,7 +45,7 @@ public class SqlDateUtil {
* @param date 日期时间,非空
* @return {@link java.sql.Date}
*/
- public static java.sql.Date date(final Date date) {
+ public static java.sql.Date date(final java.util.Date date) {
Assert.notNull(date);
return new java.sql.Date(date.getTime());
}
@@ -56,9 +57,45 @@ public class SqlDateUtil {
* @param date 日期时间,非空
* @return {@link java.sql.Time}
*/
- public static java.sql.Time time(final Date date) {
+ public static java.sql.Time time(final java.util.Date date) {
Assert.notNull(date);
return new java.sql.Time(date.getTime());
}
+ /**
+ * 时间戳转为子类型,支持:
+ *
+ * - {@link java.util.Date}
+ * - {@link DateTime}
+ * - {@link java.sql.Date}
+ * - {@link java.sql.Time}
+ * - {@link java.sql.Timestamp}
+ *
+ *
+ * @param 日期类型
+ * @param targetClass 目标类型
+ * @param mills Date
+ * @return 目标类型对象
+ */
+ @SuppressWarnings("unchecked")
+ public static T wrap(final Class> targetClass, final long mills) {
+ // 返回指定类型
+ if (java.util.Date.class == targetClass) {
+ return (T) new Date(mills);
+ }
+ if (DateTime.class == targetClass) {
+ return (T) DateUtil.date(mills);
+ }
+ if (java.sql.Date.class == targetClass) {
+ return (T) new java.sql.Date(mills);
+ }
+ if (java.sql.Time.class == targetClass) {
+ return (T) new java.sql.Time(mills);
+ }
+ if (java.sql.Timestamp.class == targetClass) {
+ return (T) new Timestamp(mills);
+ }
+
+ throw new UnsupportedOperationException(StrUtil.format("Unsupported target Date type: {}", targetClass.getName()));
+ }
}