Browse Source

add method

Looly 5 years ago
parent
commit
93d68637ef

+ 17 - 0
hutool-core/src/main/java/cn/hutool/core/convert/NumberChineseFormatter.java

@@ -142,6 +142,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 则返回 ""
 	 * 把一个 0~9999 之间的整数转换为汉字的字符串,如果是 0 则返回 ""
 	 *
 	 *
 	 * @param amountPart       数字部分
 	 * @param amountPart       数字部分

+ 121 - 49
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 {
 public class DatePattern {
 
 
@@ -22,100 +21,173 @@ public class DatePattern {
 	 *     yyyy-MM-dd HH:mm
 	 *     yyyy-MM-dd HH:mm
 	 *     yyyy-MM-dd
 	 *     yyyy-MM-dd
 	 * </pre>
 	 * </pre>
+	 *
 	 * @since 5.3.6
 	 * @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})?");
 	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
 	//-------------------------------------------------------------------------------------------------------------------------------- Normal
-	/** 标准日期格式:yyyy-MM-dd */
+	/**
+	 * 标准日期格式:yyyy-MM-dd
+	 */
 	public static final String NORM_DATE_PATTERN = "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);
 	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";
 	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);
 	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";
 	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);
 	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";
 	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);
 	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";
 	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);
 	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";
 	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);
 	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日";
 	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);
 	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秒";
 	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);
 	public static final FastDateFormat CHINESE_DATE_TIME_FORMAT = FastDateFormat.getInstance(CHINESE_DATE_TIME_PATTERN);
-	
+
 	//-------------------------------------------------------------------------------------------------------------------------------- Pure
 	//-------------------------------------------------------------------------------------------------------------------------------- Pure
-	/** 标准日期格式:yyyyMMdd */
+	/**
+	 * 标准日期格式:yyyyMMdd
+	 */
 	public static final String PURE_DATE_PATTERN = "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);
 	public static final FastDateFormat PURE_DATE_FORMAT = FastDateFormat.getInstance(PURE_DATE_PATTERN);
-	
-	/** 标准日期格式:HHmmss */
+
+	/**
+	 * 标准日期格式:HHmmss
+	 */
 	public static final String PURE_TIME_PATTERN = "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);
 	public static final FastDateFormat PURE_TIME_FORMAT = FastDateFormat.getInstance(PURE_TIME_PATTERN);
-	
-	/** 标准日期格式:yyyyMMddHHmmss */
+
+	/**
+	 * 标准日期格式:yyyyMMddHHmmss
+	 */
 	public static final String PURE_DATETIME_PATTERN = "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);
 	public static final FastDateFormat PURE_DATETIME_FORMAT = FastDateFormat.getInstance(PURE_DATETIME_PATTERN);
-	
-	/** 标准日期格式:yyyyMMddHHmmssSSS */
+
+	/**
+	 * 标准日期格式:yyyyMMddHHmmssSSS
+	 */
 	public static final String PURE_DATETIME_MS_PATTERN = "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);
 	public static final FastDateFormat PURE_DATETIME_MS_FORMAT = FastDateFormat.getInstance(PURE_DATETIME_MS_PATTERN);
-	
+
 	//-------------------------------------------------------------------------------------------------------------------------------- Others
 	//-------------------------------------------------------------------------------------------------------------------------------- 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";
 	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);
 	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";
 	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);
 	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'";
 	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"));
 	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";
 	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"));
 	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'";
 	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"));
 	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";
 	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"));
 	public static final FastDateFormat UTC_MS_WITH_ZONE_OFFSET_FORMAT = FastDateFormat.getInstance(UTC_MS_WITH_ZONE_OFFSET_PATTERN, TimeZone.getTimeZone("UTC"));
 }
 }

+ 14 - 0
hutool-core/src/test/java/cn/hutool/core/convert/NumberChineseFormatterTest.java

@@ -65,4 +65,18 @@ public class NumberChineseFormatterTest {
 		String digitToChinese3 = Convert.digitToChinese(2421.02);
 		String digitToChinese3 = Convert.digitToChinese(2421.02);
 		Assert.assertEquals("贰仟肆佰贰拾壹元零贰分", digitToChinese3);
 		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);
+	}
 }
 }