mirror of
https://gitee.com/dromara/hutool.git
synced 2025-05-04 20:58:00 +08:00
Date convert throw expt
This commit is contained in:
parent
b65be102ea
commit
d57de90f66
@ -17,6 +17,7 @@
|
||||
* 【core 】 SimpleCache缓存降低锁的粒度,提高并发能力(pr#1385@Github)
|
||||
* 【core 】 增加RadixUtil(pr#260@Gitee)
|
||||
* 【core 】 BeanUtil.getFieldValue支持获取字段集合(pr#254@Gitee)
|
||||
* 【core 】 DateConvert转换失败默认抛出异常(issue#I2M5GN@Gitee)
|
||||
|
||||
### Bug修复
|
||||
* 【core 】 修复FileUtil.move以及PathUtil.copy等无法自动创建父目录的问题(issue#I2CKTI@Gitee)
|
||||
|
@ -11,7 +11,7 @@ import java.util.Date;
|
||||
|
||||
/**
|
||||
* 日期转换器
|
||||
*
|
||||
*
|
||||
* @author Looly
|
||||
*
|
||||
*/
|
||||
@ -24,7 +24,7 @@ public class DateConverter extends AbstractConverter<java.util.Date> {
|
||||
|
||||
/**
|
||||
* 构造
|
||||
*
|
||||
*
|
||||
* @param targetType 目标类型
|
||||
*/
|
||||
public DateConverter(Class<? extends java.util.Date> targetType) {
|
||||
@ -33,7 +33,7 @@ public class DateConverter extends AbstractConverter<java.util.Date> {
|
||||
|
||||
/**
|
||||
* 构造
|
||||
*
|
||||
*
|
||||
* @param targetType 目标类型
|
||||
* @param format 日期格式
|
||||
*/
|
||||
@ -44,7 +44,7 @@ public class DateConverter extends AbstractConverter<java.util.Date> {
|
||||
|
||||
/**
|
||||
* 获取日期格式
|
||||
*
|
||||
*
|
||||
* @return 设置日期格式
|
||||
*/
|
||||
public String getFormat() {
|
||||
@ -53,7 +53,7 @@ public class DateConverter extends AbstractConverter<java.util.Date> {
|
||||
|
||||
/**
|
||||
* 设置日期格式
|
||||
*
|
||||
*
|
||||
* @param format 日期格式
|
||||
*/
|
||||
public void setFormat(String format) {
|
||||
@ -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()));
|
||||
}
|
||||
}
|
||||
|
@ -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");
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user