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 】 增加RadixUtilpr#260@Gitee
* 【core 】 BeanUtil.getFieldValue支持获取字段集合pr#254@Gitee
* 【core 】 DateConvert转换失败默认抛出异常issue#I2M5GN@Gitee
### Bug修复
* 【core 】 修复FileUtil.move以及PathUtil.copy等无法自动创建父目录的问题issue#I2CKTI@Gitee

View File

@ -62,50 +62,75 @@ public class DateConverter extends AbstractConverter<java.util.Date> {
@Override
protected java.util.Date convertInternal(Object value) {
Long mills = null;
if (value instanceof Calendar) {
// Handle Calendar
mills = ((Calendar) value).getTimeInMillis();
if (value instanceof TemporalAccessor) {
return wrap(DateUtil.date((TemporalAccessor) value));
} else if (value instanceof Calendar) {
return wrap(DateUtil.date((Calendar) value));
} else if (value instanceof Number) {
// Handle Number
mills = ((Number) value).longValue();
}else if (value instanceof TemporalAccessor) {
return DateUtil.date((TemporalAccessor) value);
return wrap(((Number) value).longValue());
} else {
// 统一按照字符串处理
final String valueStr = convertToStr(value);
Date date = null;
try {
date = StrUtil.isBlank(this.format) //
? DateUtil.parse(valueStr) //
: DateUtil.parse(valueStr, this.format);
} catch (Exception e) {
// Ignore Exception
}
final Date date = StrUtil.isBlank(this.format) //
? DateUtil.parse(valueStr) //
: DateUtil.parse(valueStr, this.format);
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()));
}
/**
* 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;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateException;
import cn.hutool.core.lang.TypeReference;
import lombok.AllArgsConstructor;
import lombok.Data;
@ -11,6 +12,7 @@ import org.junit.Test;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Set;
import java.util.concurrent.atomic.AtomicIntegerArray;
@ -245,7 +247,7 @@ public class ConvertTest {
@Test
public void toClassTest(){
final Class<?> convert = Convert.convert(Class.class, "cn.hutool.core.convert.ConvertTest.Product");
Assert.assertEquals(Product.class, convert);
Assert.assertSame(Product.class, convert);
}
@Data
@ -288,4 +290,10 @@ public class ConvertTest {
this.name = name;
}
}
@Test(expected = DateException.class)
public void toDateTest(){
// 默认转换失败报错而不是返回null
Convert.convert(Date.class, "aaaa");
}
}