mirror of
https://gitee.com/dromara/hutool.git
synced 2025-04-05 17:37:59 +08:00
fix DateConvert
This commit is contained in:
parent
7ffdc2c473
commit
0db031e88b
@ -18,6 +18,7 @@
|
||||
* 【db 】 修复SqlExecutor.callQuery关闭Statement导致的问题(issue#I16981@Gitee)
|
||||
* 【db 】 修复XmlUtil.xmlToMap中List节点的问题(pr#82@Gitee)
|
||||
* 【core】 修复ZipUtil中对于/结尾路径处理的问题(issue#I16PKP@Gitee)
|
||||
* 【core】 修复DateConvert对int不支持导致的问题(issue#677@Github)
|
||||
|
||||
-------------------------------------------------------------------------------------------------------------
|
||||
|
||||
|
@ -216,7 +216,7 @@ public class ConverterRegistry implements Serializable{
|
||||
if(type instanceof TypeReference) {
|
||||
type = ((TypeReference<?>)type).getType();
|
||||
}
|
||||
|
||||
|
||||
// 标准转换器
|
||||
final Converter<T> converter = getConverter(type, isCustomFirst);
|
||||
if (null != converter) {
|
||||
|
@ -7,6 +7,7 @@ import cn.hutool.core.util.StrUtil;
|
||||
|
||||
import java.time.temporal.TemporalAccessor;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 日期转换器
|
||||
@ -65,19 +66,25 @@ public class DateConverter extends AbstractConverter<java.util.Date> {
|
||||
if (value instanceof Calendar) {
|
||||
// Handle Calendar
|
||||
mills = ((Calendar) value).getTimeInMillis();
|
||||
} else if (value instanceof Long) {
|
||||
// Handle Long
|
||||
mills = (Long) value;
|
||||
} else if (value instanceof Number) {
|
||||
// Handle Number
|
||||
mills = ((Number) value).longValue();
|
||||
}else if (value instanceof TemporalAccessor) {
|
||||
return DateUtil.date((TemporalAccessor) value);
|
||||
} else {
|
||||
// 统一按照字符串处理
|
||||
final String valueStr = convertToStr(value);
|
||||
Date date = null;
|
||||
try {
|
||||
mills = StrUtil.isBlank(this.format) ? DateUtil.parse(valueStr).getTime() : DateUtil.parse(valueStr, this.format).getTime();
|
||||
date = StrUtil.isBlank(this.format) //
|
||||
? DateUtil.parse(valueStr) //
|
||||
: DateUtil.parse(valueStr, this.format);
|
||||
} catch (Exception e) {
|
||||
// Ignore Exception
|
||||
}
|
||||
if(null != date){
|
||||
mills = date.getTime();
|
||||
}
|
||||
}
|
||||
|
||||
if (null == mills) {
|
||||
|
@ -269,6 +269,7 @@ public class DateTime extends Date {
|
||||
*/
|
||||
public DateTime offset(DateField datePart, int offset) {
|
||||
final Calendar cal = toCalendar();
|
||||
//noinspection MagicConstant
|
||||
cal.add(datePart.getValue(), offset);
|
||||
|
||||
DateTime dt = mutable ? this : ObjectUtil.clone(this);
|
||||
@ -286,6 +287,7 @@ public class DateTime extends Date {
|
||||
*/
|
||||
public DateTime offsetNew(DateField datePart, int offset) {
|
||||
final Calendar cal = toCalendar();
|
||||
//noinspection MagicConstant
|
||||
cal.add(datePart.getValue(), offset);
|
||||
|
||||
DateTime dt = ObjectUtil.clone(this);
|
||||
@ -594,6 +596,7 @@ public class DateTime extends Date {
|
||||
locale = Locale.getDefault(Locale.Category.FORMAT);
|
||||
}
|
||||
final Calendar cal = (null != zone) ? Calendar.getInstance(zone, locale) : Calendar.getInstance(locale);
|
||||
//noinspection MagicConstant
|
||||
cal.setFirstDayOfWeek(firstDayOfWeek.getValue());
|
||||
cal.setTime(this);
|
||||
return cal;
|
||||
|
@ -3,8 +3,6 @@ package cn.hutool.core.convert;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
import cn.hutool.core.convert.Convert;
|
||||
|
||||
/**
|
||||
* 类型转换工具单元测试
|
||||
* 全角半角转换
|
||||
|
@ -21,6 +21,14 @@ public class DateConvertTest {
|
||||
Assert.assertEquals(timeLong, value2.getTime());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void toDateFromIntTest() {
|
||||
int dateLong = -1497600000;
|
||||
Date value = Convert.toDate(dateLong);
|
||||
Assert.assertNotNull(value);
|
||||
Assert.assertEquals("Mon Dec 15 00:00:00 CST 1969", value.toString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void toDateFromLocalDateTimeTest() {
|
||||
LocalDateTime localDateTime = LocalDateTime.parse("2017-05-06T08:30:00", DateTimeFormatter.ISO_DATE_TIME);
|
||||
|
@ -2,6 +2,7 @@ package cn.hutool.core.date;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.date.BetweenFormater.Level;
|
||||
import cn.hutool.core.lang.Console;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
@ -624,6 +625,14 @@ public class DateUtilTest {
|
||||
Assert.assertEquals("2017-05-06 08:30:00", date.toString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void dateTest2(){
|
||||
// 测试负数日期
|
||||
long dateLong = -1497600000;
|
||||
final DateTime date = DateUtil.date(dateLong);
|
||||
Assert.assertEquals("1969-12-15 00:00:00", date.toString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void ageTest(){
|
||||
String d1 = "2000-02-29";
|
||||
|
@ -1,8 +1,5 @@
|
||||
package cn.hutool.json;
|
||||
|
||||
import java.lang.reflect.Type;
|
||||
import java.util.List;
|
||||
|
||||
import cn.hutool.core.convert.Convert;
|
||||
import cn.hutool.core.convert.ConvertException;
|
||||
import cn.hutool.core.convert.Converter;
|
||||
@ -14,6 +11,9 @@ import cn.hutool.core.util.TypeUtil;
|
||||
import cn.hutool.json.serialize.GlobalSerializeMapping;
|
||||
import cn.hutool.json.serialize.JSONDeserializer;
|
||||
|
||||
import java.lang.reflect.Type;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* JSON转换器
|
||||
*
|
||||
@ -76,7 +76,7 @@ public class JSONConverter implements Converter<JSON> {
|
||||
return (T) deserializer.deserialize((JSON)value);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Object targetValue;
|
||||
try {
|
||||
targetValue = Convert.convert(targetType, value);
|
||||
|
@ -1,21 +1,5 @@
|
||||
package cn.hutool.json;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.StringWriter;
|
||||
import java.io.Writer;
|
||||
import java.lang.reflect.Type;
|
||||
import java.nio.charset.Charset;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.temporal.TemporalAccessor;
|
||||
import java.util.Calendar;
|
||||
import java.util.Collection;
|
||||
import java.util.Date;
|
||||
import java.util.Enumeration;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.ResourceBundle;
|
||||
|
||||
import cn.hutool.core.io.IORuntimeException;
|
||||
import cn.hutool.core.io.file.FileReader;
|
||||
import cn.hutool.core.lang.TypeReference;
|
||||
@ -31,6 +15,21 @@ import cn.hutool.json.serialize.JSONDeserializer;
|
||||
import cn.hutool.json.serialize.JSONObjectSerializer;
|
||||
import cn.hutool.json.serialize.JSONSerializer;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.StringWriter;
|
||||
import java.io.Writer;
|
||||
import java.lang.reflect.Type;
|
||||
import java.nio.charset.Charset;
|
||||
import java.time.temporal.TemporalAccessor;
|
||||
import java.util.Calendar;
|
||||
import java.util.Collection;
|
||||
import java.util.Date;
|
||||
import java.util.Enumeration;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.ResourceBundle;
|
||||
|
||||
/**
|
||||
* JSON工具类
|
||||
*
|
||||
|
@ -9,7 +9,7 @@ import java.time.LocalDateTime;
|
||||
/**
|
||||
* 问题反馈对象中有JDK8日期对象时转换失败,5.0.7修复
|
||||
*/
|
||||
public class Isse644Test {
|
||||
public class Issue644Test {
|
||||
|
||||
@Test
|
||||
public void toBeanTest(){
|
29
hutool-json/src/test/java/cn/hutool/json/Issue677Test.java
Normal file
29
hutool-json/src/test/java/cn/hutool/json/Issue677Test.java
Normal file
@ -0,0 +1,29 @@
|
||||
package cn.hutool.json;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import lombok.Data;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 用于测试1970年前的日期(负数)还有int类型的数字转日期可能导致的转换失败问题。
|
||||
*/
|
||||
public class Issue677Test {
|
||||
|
||||
@Test
|
||||
public void toBeanTest(){
|
||||
final AuditResultDto dto = new AuditResultDto();
|
||||
dto.setDate(DateUtil.date(-1497600000));
|
||||
|
||||
final String jsonStr = JSONUtil.toJsonStr(dto);
|
||||
final AuditResultDto auditResultDto = JSONUtil.toBean(jsonStr, AuditResultDto.class);
|
||||
Assert.assertEquals("Mon Dec 15 00:00:00 CST 1969", auditResultDto.getDate().toString());
|
||||
}
|
||||
|
||||
@Data
|
||||
public static class AuditResultDto{
|
||||
private Date date;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user