From 93d68637efe0b15a937b8701256fb30eefb4cfef Mon Sep 17 00:00:00 2001 From: Looly Date: Tue, 23 Jun 2020 12:15:28 +0800 Subject: [PATCH] add method --- .../core/convert/NumberChineseFormatter.java | 17 ++ .../java/cn/hutool/core/date/DatePattern.java | 170 +++++++++++++----- .../convert/NumberChineseFormatterTest.java | 14 ++ 3 files changed, 152 insertions(+), 49 deletions(-) diff --git a/hutool-core/src/main/java/cn/hutool/core/convert/NumberChineseFormatter.java b/hutool-core/src/main/java/cn/hutool/core/convert/NumberChineseFormatter.java index 3917b773f..bfdada466 100644 --- a/hutool-core/src/main/java/cn/hutool/core/convert/NumberChineseFormatter.java +++ b/hutool-core/src/main/java/cn/hutool/core/convert/NumberChineseFormatter.java @@ -141,6 +141,23 @@ public class NumberChineseFormatter { } + /** + * 数字字符转中文,非数字字符原样返回 + * + * @param c 数字字符 + * @param isUseTraditional 是否繁体 + * @return 中文字符 + * @since 5.3.9 + */ + public static String numberCharToChinese(char c, boolean isUseTraditional) { + String[] numArray = isUseTraditional ? traditionalDigits : simpleDigits; + int index = c - 48; + if (index < 0 || index >= numArray.length) { + return String.valueOf(c); + } + return numArray[index]; + } + /** * 把一个 0~9999 之间的整数转换为汉字的字符串,如果是 0 则返回 "" * diff --git a/hutool-core/src/main/java/cn/hutool/core/date/DatePattern.java b/hutool-core/src/main/java/cn/hutool/core/date/DatePattern.java index 372fa7a46..ff0b3ae40 100644 --- a/hutool-core/src/main/java/cn/hutool/core/date/DatePattern.java +++ b/hutool-core/src/main/java/cn/hutool/core/date/DatePattern.java @@ -8,9 +8,8 @@ import java.util.regex.Pattern; /** * 日期格式化类,提供常用的日期格式化对象 - * - * @author Looly * + * @author Looly */ public class DatePattern { @@ -22,100 +21,173 @@ public class DatePattern { * yyyy-MM-dd HH:mm * yyyy-MM-dd * + * * @since 5.3.6 */ public static final Pattern REGEX_NORM = Pattern.compile("\\d{4}-\\d{1,2}-\\d{1,2}(\\s\\d{1,2}:\\d{1,2}(:\\d{1,2})?)?(.\\d{1,3})?"); //-------------------------------------------------------------------------------------------------------------------------------- Normal - /** 标准日期格式:yyyy-MM-dd */ + /** + * 标准日期格式:yyyy-MM-dd + */ public static final String NORM_DATE_PATTERN = "yyyy-MM-dd"; - /** 标准日期格式 {@link FastDateFormat}:yyyy-MM-dd */ + /** + * 标准日期格式 {@link FastDateFormat}:yyyy-MM-dd + */ public static final FastDateFormat NORM_DATE_FORMAT = FastDateFormat.getInstance(NORM_DATE_PATTERN); - - /** 标准时间格式:HH:mm:ss */ + + /** + * 标准时间格式:HH:mm:ss + */ public static final String NORM_TIME_PATTERN = "HH:mm:ss"; - /** 标准时间格式 {@link FastDateFormat}:HH:mm:ss */ + /** + * 标准时间格式 {@link FastDateFormat}:HH:mm:ss + */ public static final FastDateFormat NORM_TIME_FORMAT = FastDateFormat.getInstance(NORM_TIME_PATTERN); - /** 标准日期时间格式,精确到分:yyyy-MM-dd HH:mm */ + /** + * 标准日期时间格式,精确到分:yyyy-MM-dd HH:mm + */ public static final String NORM_DATETIME_MINUTE_PATTERN = "yyyy-MM-dd HH:mm"; - /** 标准日期时间格式,精确到分 {@link FastDateFormat}:yyyy-MM-dd HH:mm */ + /** + * 标准日期时间格式,精确到分 {@link FastDateFormat}:yyyy-MM-dd HH:mm + */ public static final FastDateFormat NORM_DATETIME_MINUTE_FORMAT = FastDateFormat.getInstance(NORM_DATETIME_MINUTE_PATTERN); - /** 标准日期时间格式,精确到秒:yyyy-MM-dd HH:mm:ss */ + /** + * 标准日期时间格式,精确到秒:yyyy-MM-dd HH:mm:ss + */ public static final String NORM_DATETIME_PATTERN = "yyyy-MM-dd HH:mm:ss"; - /** 标准日期时间格式,精确到秒 {@link FastDateFormat}:yyyy-MM-dd HH:mm:ss */ + /** + * 标准日期时间格式,精确到秒 {@link FastDateFormat}:yyyy-MM-dd HH:mm:ss + */ public static final FastDateFormat NORM_DATETIME_FORMAT = FastDateFormat.getInstance(NORM_DATETIME_PATTERN); - /** 标准日期时间格式,精确到毫秒:yyyy-MM-dd HH:mm:ss.SSS */ + /** + * 标准日期时间格式,精确到毫秒:yyyy-MM-dd HH:mm:ss.SSS + */ public static final String NORM_DATETIME_MS_PATTERN = "yyyy-MM-dd HH:mm:ss.SSS"; - /** 标准日期时间格式,精确到毫秒 {@link FastDateFormat}:yyyy-MM-dd HH:mm:ss.SSS */ + /** + * 标准日期时间格式,精确到毫秒 {@link FastDateFormat}:yyyy-MM-dd HH:mm:ss.SSS + */ public static final FastDateFormat NORM_DATETIME_MS_FORMAT = FastDateFormat.getInstance(NORM_DATETIME_MS_PATTERN); - /** ISO8601日期时间格式,精确到毫秒:yyyy-MM-dd HH:mm:ss,SSS */ + /** + * ISO8601日期时间格式,精确到毫秒:yyyy-MM-dd HH:mm:ss,SSS + */ public static final String ISO8601_PATTERN = "yyyy-MM-dd HH:mm:ss,SSS"; - /** ISO8601日期时间格式,精确到毫秒 {@link FastDateFormat}:yyyy-MM-dd HH:mm:ss,SSS */ + /** + * ISO8601日期时间格式,精确到毫秒 {@link FastDateFormat}:yyyy-MM-dd HH:mm:ss,SSS + */ public static final FastDateFormat ISO8601_FORMAT = FastDateFormat.getInstance(ISO8601_PATTERN); - /** 标准日期格式:yyyy年MM月dd日 */ + /** + * 标准日期格式:yyyy年MM月dd日 + */ public static final String CHINESE_DATE_PATTERN = "yyyy年MM月dd日"; - /** 标准日期格式 {@link FastDateFormat}:yyyy年MM月dd日 */ + /** + * 标准日期格式 {@link FastDateFormat}:yyyy年MM月dd日 + */ public static final FastDateFormat CHINESE_DATE_FORMAT = FastDateFormat.getInstance(CHINESE_DATE_PATTERN); - - /** 标准日期格式:yyyy年MM月dd日 HH时mm分ss秒 */ + + /** + * 标准日期格式:yyyy年MM月dd日 HH时mm分ss秒 + */ public static final String CHINESE_DATE_TIME_PATTERN = "yyyy年MM月dd日HH时mm分ss秒"; - /** 标准日期格式 {@link FastDateFormat}:yyyy年MM月dd日HH时mm分ss秒*/ + /** + * 标准日期格式 {@link FastDateFormat}:yyyy年MM月dd日HH时mm分ss秒 + */ public static final FastDateFormat CHINESE_DATE_TIME_FORMAT = FastDateFormat.getInstance(CHINESE_DATE_TIME_PATTERN); - + //-------------------------------------------------------------------------------------------------------------------------------- Pure - /** 标准日期格式:yyyyMMdd */ + /** + * 标准日期格式:yyyyMMdd + */ public static final String PURE_DATE_PATTERN = "yyyyMMdd"; - /** 标准日期格式 {@link FastDateFormat}:yyyyMMdd */ + /** + * 标准日期格式 {@link FastDateFormat}:yyyyMMdd + */ public static final FastDateFormat PURE_DATE_FORMAT = FastDateFormat.getInstance(PURE_DATE_PATTERN); - - /** 标准日期格式:HHmmss */ + + /** + * 标准日期格式:HHmmss + */ public static final String PURE_TIME_PATTERN = "HHmmss"; - /** 标准日期格式 {@link FastDateFormat}:HHmmss */ + /** + * 标准日期格式 {@link FastDateFormat}:HHmmss + */ public static final FastDateFormat PURE_TIME_FORMAT = FastDateFormat.getInstance(PURE_TIME_PATTERN); - - /** 标准日期格式:yyyyMMddHHmmss */ + + /** + * 标准日期格式:yyyyMMddHHmmss + */ public static final String PURE_DATETIME_PATTERN = "yyyyMMddHHmmss"; - /** 标准日期格式 {@link FastDateFormat}:yyyyMMddHHmmss */ + /** + * 标准日期格式 {@link FastDateFormat}:yyyyMMddHHmmss + */ public static final FastDateFormat PURE_DATETIME_FORMAT = FastDateFormat.getInstance(PURE_DATETIME_PATTERN); - - /** 标准日期格式:yyyyMMddHHmmssSSS */ + + /** + * 标准日期格式:yyyyMMddHHmmssSSS + */ public static final String PURE_DATETIME_MS_PATTERN = "yyyyMMddHHmmssSSS"; - /** 标准日期格式 {@link FastDateFormat}:yyyyMMddHHmmssSSS */ + /** + * 标准日期格式 {@link FastDateFormat}:yyyyMMddHHmmssSSS + */ public static final FastDateFormat PURE_DATETIME_MS_FORMAT = FastDateFormat.getInstance(PURE_DATETIME_MS_PATTERN); - + //-------------------------------------------------------------------------------------------------------------------------------- Others - /** HTTP头中日期时间格式:EEE, dd MMM yyyy HH:mm:ss z */ + /** + * HTTP头中日期时间格式:EEE, dd MMM yyyy HH:mm:ss z + */ public static final String HTTP_DATETIME_PATTERN = "EEE, dd MMM yyyy HH:mm:ss z"; - /** HTTP头中日期时间格式 {@link FastDateFormat}:EEE, dd MMM yyyy HH:mm:ss z */ + /** + * HTTP头中日期时间格式 {@link FastDateFormat}:EEE, dd MMM yyyy HH:mm:ss z + */ public static final FastDateFormat HTTP_DATETIME_FORMAT = FastDateFormat.getInstance(HTTP_DATETIME_PATTERN, TimeZone.getTimeZone("GMT"), Locale.US); - /** JDK中日期时间格式:EEE MMM dd HH:mm:ss zzz yyyy */ + /** + * JDK中日期时间格式:EEE MMM dd HH:mm:ss zzz yyyy + */ public static final String JDK_DATETIME_PATTERN = "EEE MMM dd HH:mm:ss zzz yyyy"; - /** JDK中日期时间格式 {@link FastDateFormat}:EEE MMM dd HH:mm:ss zzz yyyy */ + /** + * JDK中日期时间格式 {@link FastDateFormat}:EEE MMM dd HH:mm:ss zzz yyyy + */ public static final FastDateFormat JDK_DATETIME_FORMAT = FastDateFormat.getInstance(JDK_DATETIME_PATTERN, Locale.US); - - /** UTC时间:yyyy-MM-dd'T'HH:mm:ss'Z' */ + + /** + * UTC时间:yyyy-MM-dd'T'HH:mm:ss'Z' + */ public static final String UTC_PATTERN = "yyyy-MM-dd'T'HH:mm:ss'Z'"; - /** UTC时间{@link FastDateFormat}:yyyy-MM-dd'T'HH:mm:ss'Z' */ + /** + * UTC时间{@link FastDateFormat}:yyyy-MM-dd'T'HH:mm:ss'Z' + */ public static final FastDateFormat UTC_FORMAT = FastDateFormat.getInstance(UTC_PATTERN, TimeZone.getTimeZone("UTC")); - - /** UTC时间:yyyy-MM-dd'T'HH:mm:ssZ */ + + /** + * UTC时间:yyyy-MM-dd'T'HH:mm:ssZ + */ public static final String UTC_WITH_ZONE_OFFSET_PATTERN = "yyyy-MM-dd'T'HH:mm:ssZ"; - /** UTC时间{@link FastDateFormat}:yyyy-MM-dd'T'HH:mm:ssZ */ + /** + * UTC时间{@link FastDateFormat}:yyyy-MM-dd'T'HH:mm:ssZ + */ public static final FastDateFormat UTC_WITH_ZONE_OFFSET_FORMAT = FastDateFormat.getInstance(UTC_WITH_ZONE_OFFSET_PATTERN, TimeZone.getTimeZone("UTC")); - - /** UTC时间:yyyy-MM-dd'T'HH:mm:ss.SSS'Z' */ + + /** + * UTC时间:yyyy-MM-dd'T'HH:mm:ss.SSS'Z' + */ public static final String UTC_MS_PATTERN = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"; - /** UTC时间{@link FastDateFormat}:yyyy-MM-dd'T'HH:mm:ss.SSS'Z' */ + /** + * UTC时间{@link FastDateFormat}:yyyy-MM-dd'T'HH:mm:ss.SSS'Z' + */ public static final FastDateFormat UTC_MS_FORMAT = FastDateFormat.getInstance(UTC_MS_PATTERN, TimeZone.getTimeZone("UTC")); - - /** UTC时间:yyyy-MM-dd'T'HH:mm:ssZ */ + + /** + * UTC时间:yyyy-MM-dd'T'HH:mm:ssZ + */ public static final String UTC_MS_WITH_ZONE_OFFSET_PATTERN = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"; - /** UTC时间{@link FastDateFormat}:yyyy-MM-dd'T'HH:mm:ssZ */ + /** + * UTC时间{@link FastDateFormat}:yyyy-MM-dd'T'HH:mm:ssZ + */ public static final FastDateFormat UTC_MS_WITH_ZONE_OFFSET_FORMAT = FastDateFormat.getInstance(UTC_MS_WITH_ZONE_OFFSET_PATTERN, TimeZone.getTimeZone("UTC")); } diff --git a/hutool-core/src/test/java/cn/hutool/core/convert/NumberChineseFormatterTest.java b/hutool-core/src/test/java/cn/hutool/core/convert/NumberChineseFormatterTest.java index d30d54069..cff3c492c 100644 --- a/hutool-core/src/test/java/cn/hutool/core/convert/NumberChineseFormatterTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/convert/NumberChineseFormatterTest.java @@ -65,4 +65,18 @@ public class NumberChineseFormatterTest { String digitToChinese3 = Convert.digitToChinese(2421.02); Assert.assertEquals("贰仟肆佰贰拾壹元零贰分", digitToChinese3); } + + @Test + public void numberCharToChineseTest(){ + String s = NumberChineseFormatter.numberCharToChinese('1', false); + Assert.assertEquals("一", s); + s = NumberChineseFormatter.numberCharToChinese('2', false); + Assert.assertEquals("二", s); + s = NumberChineseFormatter.numberCharToChinese('0', false); + Assert.assertEquals("零", s); + + // 非数字字符原样返回 + s = NumberChineseFormatter.numberCharToChinese('A', false); + Assert.assertEquals("A", s); + } }