This commit is contained in:
Looly 2023-08-08 19:52:11 +08:00
parent 2c060433b9
commit 17243c0427
2 changed files with 52 additions and 16 deletions

View File

@ -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转为子类型
* 时间戳转为子类型支持
* <ul>
* <li>{@link java.util.Date}</li>
* <li>{@link DateTime}</li>
* <li>{@link java.sql.Date}</li>
* <li>{@link java.sql.Time}</li>
* <li>{@link java.sql.Timestamp}</li>
* </ul>
*
* @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);
}
}

View File

@ -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());
}
/**
* 时间戳转为子类型支持
* <ul>
* <li>{@link java.util.Date}</li>
* <li>{@link DateTime}</li>
* <li>{@link java.sql.Date}</li>
* <li>{@link java.sql.Time}</li>
* <li>{@link java.sql.Timestamp}</li>
* </ul>
*
* @param <T> 日期类型
* @param targetClass 目标类型
* @param mills Date
* @return 目标类型对象
*/
@SuppressWarnings("unchecked")
public static <T extends java.util.Date> 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()));
}
}