Date convert throw expt

This commit is contained in:
Looly
2021-01-25 18:42:24 +08:00
parent b65be102ea
commit d57de90f66
3 changed files with 75 additions and 41 deletions

View File

@@ -17,6 +17,7 @@
* 【core 】 SimpleCache缓存降低锁的粒度提高并发能力pr#1385@Github * 【core 】 SimpleCache缓存降低锁的粒度提高并发能力pr#1385@Github
* 【core 】 增加RadixUtilpr#260@Gitee * 【core 】 增加RadixUtilpr#260@Gitee
* 【core 】 BeanUtil.getFieldValue支持获取字段集合pr#254@Gitee * 【core 】 BeanUtil.getFieldValue支持获取字段集合pr#254@Gitee
* 【core 】 DateConvert转换失败默认抛出异常issue#I2M5GN@Gitee
### Bug修复 ### Bug修复
* 【core 】 修复FileUtil.move以及PathUtil.copy等无法自动创建父目录的问题issue#I2CKTI@Gitee * 【core 】 修复FileUtil.move以及PathUtil.copy等无法自动创建父目录的问题issue#I2CKTI@Gitee

View File

@@ -11,7 +11,7 @@ import java.util.Date;
/** /**
* 日期转换器 * 日期转换器
* *
* @author Looly * @author Looly
* *
*/ */
@@ -24,7 +24,7 @@ public class DateConverter extends AbstractConverter<java.util.Date> {
/** /**
* 构造 * 构造
* *
* @param targetType 目标类型 * @param targetType 目标类型
*/ */
public DateConverter(Class<? extends java.util.Date> targetType) { public DateConverter(Class<? extends java.util.Date> targetType) {
@@ -33,7 +33,7 @@ public class DateConverter extends AbstractConverter<java.util.Date> {
/** /**
* 构造 * 构造
* *
* @param targetType 目标类型 * @param targetType 目标类型
* @param format 日期格式 * @param format 日期格式
*/ */
@@ -44,7 +44,7 @@ public class DateConverter extends AbstractConverter<java.util.Date> {
/** /**
* 获取日期格式 * 获取日期格式
* *
* @return 设置日期格式 * @return 设置日期格式
*/ */
public String getFormat() { public String getFormat() {
@@ -53,7 +53,7 @@ public class DateConverter extends AbstractConverter<java.util.Date> {
/** /**
* 设置日期格式 * 设置日期格式
* *
* @param format 日期格式 * @param format 日期格式
*/ */
public void setFormat(String format) { public void setFormat(String format) {
@@ -62,50 +62,75 @@ public class DateConverter extends AbstractConverter<java.util.Date> {
@Override @Override
protected java.util.Date convertInternal(Object value) { protected java.util.Date convertInternal(Object value) {
Long mills = null; if (value instanceof TemporalAccessor) {
if (value instanceof Calendar) { return wrap(DateUtil.date((TemporalAccessor) value));
// Handle Calendar } else if (value instanceof Calendar) {
mills = ((Calendar) value).getTimeInMillis(); return wrap(DateUtil.date((Calendar) value));
} else if (value instanceof Number) { } else if (value instanceof Number) {
// Handle Number return wrap(((Number) value).longValue());
mills = ((Number) value).longValue();
}else if (value instanceof TemporalAccessor) {
return DateUtil.date((TemporalAccessor) value);
} else { } else {
// 统一按照字符串处理 // 统一按照字符串处理
final String valueStr = convertToStr(value); final String valueStr = convertToStr(value);
Date date = null; final Date date = StrUtil.isBlank(this.format) //
try { ? DateUtil.parse(valueStr) //
date = StrUtil.isBlank(this.format) // : DateUtil.parse(valueStr, this.format);
? DateUtil.parse(valueStr) //
: DateUtil.parse(valueStr, this.format);
} catch (Exception e) {
// Ignore Exception
}
if(null != date){ if(null != date){
mills = date.getTime(); return wrap(date);
} }
} }
if (null == mills) {
return null;
}
// 返回指定类型
if (java.util.Date.class == targetType) {
return new java.util.Date(mills);
}
if (DateTime.class == targetType) {
return new DateTime(mills);
} else if (java.sql.Date.class == targetType) {
return new java.sql.Date(mills);
} else if (java.sql.Time.class == targetType) {
return new java.sql.Time(mills);
} else if (java.sql.Timestamp.class == targetType) {
return new java.sql.Timestamp(mills);
}
throw new UnsupportedOperationException(StrUtil.format("Unsupport Date type: {}", this.targetType.getName())); throw new UnsupportedOperationException(StrUtil.format("Unsupport Date type: {}", this.targetType.getName()));
} }
/**
* java.util.Date转为子类型
* @param date Date
* @return 目标类型对象
*/
private java.util.Date wrap(java.util.Date date){
// 返回指定类型
if (java.util.Date.class == targetType) {
return date;
}
if (DateTime.class == targetType) {
return DateUtil.date(date);
}
if (java.sql.Date.class == targetType) {
return new java.sql.Date(date.getTime());
}
if (java.sql.Time.class == targetType) {
return new java.sql.Time(date.getTime());
}
if (java.sql.Timestamp.class == targetType) {
return new java.sql.Timestamp(date.getTime());
}
throw new UnsupportedOperationException(StrUtil.format("Unsupport Date type: {}", this.targetType.getName()));
}
/**
* java.util.Date转为子类型
* @param mills Date
* @return 目标类型对象
*/
private java.util.Date wrap(long mills){
// 返回指定类型
if (java.util.Date.class == targetType) {
return new Date(mills);
}
if (DateTime.class == targetType) {
return DateUtil.date(mills);
}
if (java.sql.Date.class == targetType) {
return new java.sql.Date(mills);
}
if (java.sql.Time.class == targetType) {
return new java.sql.Time(mills);
}
if (java.sql.Timestamp.class == targetType) {
return new java.sql.Timestamp(mills);
}
throw new UnsupportedOperationException(StrUtil.format("Unsupport Date type: {}", this.targetType.getName()));
}
} }

View File

@@ -1,6 +1,7 @@
package cn.hutool.core.convert; package cn.hutool.core.convert;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateException;
import cn.hutool.core.lang.TypeReference; import cn.hutool.core.lang.TypeReference;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
@@ -11,6 +12,7 @@ import org.junit.Test;
import java.io.Serializable; import java.io.Serializable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import java.util.concurrent.atomic.AtomicIntegerArray; import java.util.concurrent.atomic.AtomicIntegerArray;
@@ -245,7 +247,7 @@ public class ConvertTest {
@Test @Test
public void toClassTest(){ public void toClassTest(){
final Class<?> convert = Convert.convert(Class.class, "cn.hutool.core.convert.ConvertTest.Product"); final Class<?> convert = Convert.convert(Class.class, "cn.hutool.core.convert.ConvertTest.Product");
Assert.assertEquals(Product.class, convert); Assert.assertSame(Product.class, convert);
} }
@Data @Data
@@ -288,4 +290,10 @@ public class ConvertTest {
this.name = name; this.name = name;
} }
} }
@Test(expected = DateException.class)
public void toDateTest(){
// 默认转换失败报错而不是返回null
Convert.convert(Date.class, "aaaa");
}
} }