mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-07-21 15:09:48 +08:00
Date convert throw expt
This commit is contained in:
@@ -17,6 +17,7 @@
|
|||||||
* 【core 】 SimpleCache缓存降低锁的粒度,提高并发能力(pr#1385@Github)
|
* 【core 】 SimpleCache缓存降低锁的粒度,提高并发能力(pr#1385@Github)
|
||||||
* 【core 】 增加RadixUtil(pr#260@Gitee)
|
* 【core 】 增加RadixUtil(pr#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)
|
||||||
|
@@ -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()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user