From 17243c0427b6d2f2b892b8cfb56f859c2b268dea Mon Sep 17 00:00:00 2001 From: Looly Date: Tue, 8 Aug 2023 19:52:11 +0800 Subject: [PATCH] fix code --- .../core/convert/impl/DateConverter.java | 25 ++++++----- .../dromara/hutool/core/date/SqlDateUtil.java | 43 +++++++++++++++++-- 2 files changed, 52 insertions(+), 16 deletions(-) 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转为子类型 + * 时间戳转为子类型,支持: + * * * @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()); } + /** + * 时间戳转为子类型,支持: + * + * + * @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())); + } }