From 200dc6c5eac2c6693e50a31d2c87519d01821810 Mon Sep 17 00:00:00 2001 From: Looly Date: Sun, 17 May 2020 19:19:24 +0800 Subject: [PATCH] add date to long support for Convert --- CHANGELOG.md | 3 +- .../core/convert/impl/NumberConverter.java | 48 ++++++++----------- .../core/convert/ConvertToNumberTest.java | 26 ++++++++++ .../extra/pinyin/engine/PinyinFactory.java | 2 +- 4 files changed, 50 insertions(+), 29 deletions(-) create mode 100644 hutool-core/src/test/java/cn/hutool/core/convert/ConvertToNumberTest.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 2c64a8067..32f3a5fe9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,9 +3,10 @@ ------------------------------------------------------------------------------------------------------------- -## 5.3.6 (2020-05-14) +## 5.3.6 (2020-05-17) ### 新特性 +* 【core 】 NumberConverter Long类型增加日期转换(pr#872@Github) ### Bug修复 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 8ec0b8886..040035e8e 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 @@ -21,7 +21,9 @@ import java.util.concurrent.atomic.AtomicLong; *
  • java.lang.Byte
  • *
  • java.lang.Short
  • *
  • java.lang.Integer
  • + *
  • java.util.concurrent.atomic.AtomicInteger
  • *
  • java.lang.Long
  • + *
  • java.util.concurrent.atomic.AtomicLong
  • *
  • java.lang.Float
  • *
  • java.lang.Double
  • *
  • java.math.BigDecimal
  • @@ -51,7 +53,10 @@ public class NumberConverter extends AbstractConverter { @Override protected Number convertInternal(Object value) { - final Class targetType = this.targetType; + return convertInternal(value, this.targetType); + } + + private Number convertInternal(Object value, Class targetType) { if (Byte.class == targetType) { if (value instanceof Number) { return ((Number) value).byteValue(); @@ -60,7 +65,7 @@ public class NumberConverter extends AbstractConverter { } final String valueStr = convertToStr(value); return StrUtil.isBlank(valueStr) ? null : Byte.valueOf(valueStr); - + } else if (Short.class == targetType) { if (value instanceof Number) { return ((Number) value).shortValue(); @@ -78,20 +83,15 @@ public class NumberConverter extends AbstractConverter { } final String valueStr = convertToStr(value); return StrUtil.isBlank(valueStr) ? null : NumberUtil.parseInt(valueStr); - + } else if (AtomicInteger.class == targetType) { - final AtomicInteger intValue = new AtomicInteger(); - if (value instanceof Number) { - intValue.set(((Number) value).intValue()); - } else if(value instanceof Boolean) { - intValue.set(BooleanUtil.toInt((Boolean) value)); + final Number number = convertInternal(value, Integer.class); + if(null != number){ + final AtomicInteger intValue = new AtomicInteger(); + intValue.set(number.intValue()); + return intValue; } - final String valueStr = convertToStr(value); - if (StrUtil.isBlank(valueStr)) { - return null; - } - intValue.set(NumberUtil.parseInt(valueStr)); - return intValue; + return null; } else if (Long.class == targetType) { if (value instanceof Number) { return ((Number) value).longValue(); @@ -108,19 +108,13 @@ public class NumberConverter extends AbstractConverter { return StrUtil.isBlank(valueStr) ? null : NumberUtil.parseLong(valueStr); } else if (AtomicLong.class == targetType) { - final AtomicLong longValue = new AtomicLong(); - if (value instanceof Number) { - longValue.set(((Number) value).longValue()); - } else if(value instanceof Boolean) { - longValue.set(BooleanUtil.toLong((Boolean) value)); + final Number number = convertInternal(value, Long.class); + if(null != number){ + final AtomicLong longValue = new AtomicLong(); + longValue.set(number.longValue()); + return longValue; } - final String valueStr = convertToStr(value); - if (StrUtil.isBlank(valueStr)) { - return null; - } - longValue.set(NumberUtil.parseLong(valueStr)); - return longValue; - + return null; } else if (Float.class == targetType) { if (value instanceof Number) { return ((Number) value).floatValue(); @@ -144,7 +138,7 @@ public class NumberConverter extends AbstractConverter { } else if (BigInteger.class == targetType) { return toBigInteger(value); - + }else if(Number.class == targetType){ if (value instanceof Number) { return (Number)value; 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 new file mode 100644 index 000000000..ed2b09b95 --- /dev/null +++ b/hutool-core/src/test/java/cn/hutool/core/convert/ConvertToNumberTest.java @@ -0,0 +1,26 @@ +package cn.hutool.core.convert; + +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import org.junit.Assert; +import org.junit.Test; + +import java.util.concurrent.atomic.AtomicLong; + +public class ConvertToNumberTest { + @Test + public void dateToLongTest(){ + final DateTime date = DateUtil.parse("2020-05-17 12:32:00"); + final Long dateLong = Convert.toLong(date); + assert date != null; + Assert.assertEquals(date.getTime(), dateLong.longValue()); + } + + @Test + public void dateToAtomicLongTest(){ + final DateTime date = DateUtil.parse("2020-05-17 12:32:00"); + final AtomicLong dateLong = Convert.convert(AtomicLong.class, date); + assert date != null; + Assert.assertEquals(date.getTime(), dateLong.longValue()); + } +} diff --git a/hutool-extra/src/main/java/cn/hutool/extra/pinyin/engine/PinyinFactory.java b/hutool-extra/src/main/java/cn/hutool/extra/pinyin/engine/PinyinFactory.java index 09d2228ba..cef4a5fd0 100644 --- a/hutool-extra/src/main/java/cn/hutool/extra/pinyin/engine/PinyinFactory.java +++ b/hutool-extra/src/main/java/cn/hutool/extra/pinyin/engine/PinyinFactory.java @@ -47,6 +47,6 @@ public class PinyinFactory { return engine; } - throw new TemplateException("No template found ! Please add one of pinyin jar to your project !"); + throw new TemplateException("No pinyin jar found ! Please add one of it to your project !"); } }