From a0b1a336540ef27e7dba57aa97aed1cd4a3e63a1 Mon Sep 17 00:00:00 2001 From: Looly Date: Sun, 17 May 2020 19:26:40 +0800 Subject: [PATCH] add date to long support for Convert --- .../core/convert/impl/NumberConverter.java | 59 ++++++++++--------- .../core/convert/ConvertToNumberTest.java | 8 +++ 2 files changed, 40 insertions(+), 27 deletions(-) diff --git a/hutool-core/src/main/java/cn/hutool/core/convert/impl/NumberConverter.java b/hutool-core/src/main/java/cn/hutool/core/convert/impl/NumberConverter.java index 040035e8e..97fca587f 100644 --- a/hutool-core/src/main/java/cn/hutool/core/convert/impl/NumberConverter.java +++ b/hutool-core/src/main/java/cn/hutool/core/convert/impl/NumberConverter.java @@ -29,9 +29,8 @@ import java.util.concurrent.atomic.AtomicLong; *
  • java.math.BigDecimal
  • *
  • java.math.BigInteger
  • * - * - * @author Looly * + * @author Looly */ public class NumberConverter extends AbstractConverter { private static final long serialVersionUID = 1L; @@ -44,7 +43,7 @@ public class NumberConverter extends AbstractConverter { /** * 构造
    - * + * * @param clazz 需要转换的数字类型,默认 {@link Number} */ public NumberConverter(Class clazz) { @@ -60,8 +59,8 @@ public class NumberConverter extends AbstractConverter { if (Byte.class == targetType) { if (value instanceof Number) { return ((Number) value).byteValue(); - } else if(value instanceof Boolean) { - return BooleanUtil.toByteObj((Boolean)value); + } else if (value instanceof Boolean) { + return BooleanUtil.toByteObj((Boolean) value); } final String valueStr = convertToStr(value); return StrUtil.isBlank(valueStr) ? null : Byte.valueOf(valueStr); @@ -69,8 +68,8 @@ public class NumberConverter extends AbstractConverter { } else if (Short.class == targetType) { if (value instanceof Number) { return ((Number) value).shortValue(); - } else if(value instanceof Boolean) { - return BooleanUtil.toShortObj((Boolean)value); + } else if (value instanceof Boolean) { + return BooleanUtil.toShortObj((Boolean) value); } final String valueStr = convertToStr(value); return StrUtil.isBlank(valueStr) ? null : Short.valueOf(valueStr); @@ -78,15 +77,21 @@ public class NumberConverter extends AbstractConverter { } else if (Integer.class == targetType) { if (value instanceof Number) { return ((Number) value).intValue(); - } else if(value instanceof Boolean) { - return BooleanUtil.toInteger((Boolean)value); + } else if (value instanceof Boolean) { + return BooleanUtil.toInteger((Boolean) value); + } else if (value instanceof Date) { + return (int)((Date) value).getTime(); + } else if (value instanceof Calendar) { + return (int)((Calendar) value).getTimeInMillis(); + } else if (value instanceof TemporalAccessor) { + return (int)DateUtil.toInstant((TemporalAccessor) value).toEpochMilli(); } final String valueStr = convertToStr(value); return StrUtil.isBlank(valueStr) ? null : NumberUtil.parseInt(valueStr); } else if (AtomicInteger.class == targetType) { final Number number = convertInternal(value, Integer.class); - if(null != number){ + if (null != number) { final AtomicInteger intValue = new AtomicInteger(); intValue.set(number.intValue()); return intValue; @@ -95,8 +100,8 @@ public class NumberConverter extends AbstractConverter { } else if (Long.class == targetType) { if (value instanceof Number) { return ((Number) value).longValue(); - } else if(value instanceof Boolean) { - return BooleanUtil.toLongObj((Boolean)value); + } else if (value instanceof Boolean) { + return BooleanUtil.toLongObj((Boolean) value); } else if (value instanceof Date) { return ((Date) value).getTime(); } else if (value instanceof Calendar) { @@ -109,7 +114,7 @@ public class NumberConverter extends AbstractConverter { } else if (AtomicLong.class == targetType) { final Number number = convertInternal(value, Long.class); - if(null != number){ + if (null != number) { final AtomicLong longValue = new AtomicLong(); longValue.set(number.longValue()); return longValue; @@ -118,8 +123,8 @@ public class NumberConverter extends AbstractConverter { } else if (Float.class == targetType) { if (value instanceof Number) { return ((Number) value).floatValue(); - } else if(value instanceof Boolean) { - return BooleanUtil.toFloatObj((Boolean)value); + } else if (value instanceof Boolean) { + return BooleanUtil.toFloatObj((Boolean) value); } final String valueStr = convertToStr(value); return StrUtil.isBlank(valueStr) ? null : Float.valueOf(valueStr); @@ -127,8 +132,8 @@ public class NumberConverter extends AbstractConverter { } else if (Double.class == targetType) { if (value instanceof Number) { return ((Number) value).doubleValue(); - } else if(value instanceof Boolean) { - return BooleanUtil.toDoubleObj((Boolean)value); + } else if (value instanceof Boolean) { + return BooleanUtil.toDoubleObj((Boolean) value); } final String valueStr = convertToStr(value); return StrUtil.isBlank(valueStr) ? null : Double.valueOf(valueStr); @@ -139,11 +144,11 @@ public class NumberConverter extends AbstractConverter { } else if (BigInteger.class == targetType) { return toBigInteger(value); - }else if(Number.class == targetType){ + } else if (Number.class == targetType) { if (value instanceof Number) { - return (Number)value; - } else if(value instanceof Boolean) { - return BooleanUtil.toInteger((Boolean)value); + return (Number) value; + } else if (value instanceof Boolean) { + return BooleanUtil.toInteger((Boolean) value); } final String valueStr = convertToStr(value); return StrUtil.isBlank(valueStr) ? null : NumberUtil.parseNumber(valueStr); @@ -156,7 +161,7 @@ public class NumberConverter extends AbstractConverter { * 转换为BigDecimal
    * 如果给定的值为空,或者转换失败,返回默认值
    * 转换失败不会报错 - * + * * @param value 被转换的值 * @return 结果 */ @@ -167,8 +172,8 @@ public class NumberConverter extends AbstractConverter { return new BigDecimal((Integer) value); } else if (value instanceof BigInteger) { return new BigDecimal((BigInteger) value); - } else if(value instanceof Boolean) { - return new BigDecimal((boolean)value ? 1 : 0); + } else if (value instanceof Boolean) { + return new BigDecimal((boolean) value ? 1 : 0); } //对于Double类型,先要转换为String,避免精度问题 @@ -183,15 +188,15 @@ public class NumberConverter extends AbstractConverter { * 转换为BigInteger
    * 如果给定的值为空,或者转换失败,返回默认值
    * 转换失败不会报错 - * + * * @param value 被转换的值 * @return 结果 */ private BigInteger toBigInteger(Object value) { if (value instanceof Long) { return BigInteger.valueOf((Long) value); - } else if(value instanceof Boolean) { - return BigInteger.valueOf((boolean)value ? 1 : 0); + } else if (value instanceof Boolean) { + return BigInteger.valueOf((boolean) value ? 1 : 0); } final String valueStr = convertToStr(value); if (StrUtil.isBlank(valueStr)) { diff --git a/hutool-core/src/test/java/cn/hutool/core/convert/ConvertToNumberTest.java b/hutool-core/src/test/java/cn/hutool/core/convert/ConvertToNumberTest.java index ed2b09b95..f8b30cf26 100644 --- a/hutool-core/src/test/java/cn/hutool/core/convert/ConvertToNumberTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/convert/ConvertToNumberTest.java @@ -16,6 +16,14 @@ public class ConvertToNumberTest { Assert.assertEquals(date.getTime(), dateLong.longValue()); } + @Test + public void dateToIntTest(){ + final DateTime date = DateUtil.parse("2020-05-17 12:32:00"); + final Integer dateInt = Convert.toInt(date); + assert date != null; + Assert.assertEquals((int)date.getTime(), dateInt.intValue()); + } + @Test public void dateToAtomicLongTest(){ final DateTime date = DateUtil.parse("2020-05-17 12:32:00");