package bly;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 中文大写日期转小写
*/
public class TestTime {
public static void main(String[] args) {
System.out.println(cnNumericToArabic("二零一七年十月十二日"));
System.out.println(cnNumericToArabic("二零一七年十一月二十日"));
System.out.println(cnNumericToArabic("二零一七年一月二十三日"));
}
private static final Character[] CN_NUMERIC = { '一', '二', '三', '四', '五',
'六', '七', '八', '九', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖',
'○', 'O', '零', '十', '拾', 'O', '0' };
// 日期正则 eg:二零一七年五月十三日
private static final String DATE_REGEX = "(?<YEAR>[0O○〇一二三四五六七八九十零壹贰叁肆伍陆柒捌玖拾]{1,4})[年\\\\.-](?:(?<MONTH>[0O○〇一二三四五六七八九十零壹贰叁肆伍陆柒捌玖拾]{1,2})[月\\\\.-])?(?:(?<DAY>[0O○〇一二三四五六七八九十零壹贰叁肆伍陆柒捌玖拾]{1,3})[日号\\\\.-])?";
private static Map<Character, String> cnNumeric = null;
private static final String num_shi = "10";
static {
cnNumeric = new HashMap<Character, String>();
for (int j = 0; j < 9; j++)
cnNumeric.put(CN_NUMERIC[j], String.valueOf(j + 1));
for (int j = 9; j < 18; j++)
cnNumeric.put(CN_NUMERIC[j], String.valueOf(j - 9));
cnNumeric.put('0', "0");
cnNumeric.put('O', "0");
cnNumeric.put('○', "0");
cnNumeric.put('O', "0");
cnNumeric.put('〇', "0");
cnNumeric.put('零', "0");
cnNumeric.put('十', "1");
cnNumeric.put('拾', "1");
}
public static Date cnNumericToArabic(String dateStr) {
Date date = new Date();
date = null;
dateStr = dateStr.trim();
Matcher matcher = Pattern.compile(DATE_REGEX).matcher(dateStr);
if (matcher.find()) {
String year = matcher.group("YEAR");
String month = matcher.group("MONTH");
String day = matcher.group("DAY");
if (year != null && month != null && day != null) {
date = getTransToDate(year, month, day);
}
}
return date;
}
/**
* 转换年月日为小写数字Date类型
*
* @param year
* @param month
* @param day
* @return
*/
private static Date getTransToDate(String year, String month, String day) {
Date date = new Date();
String yearNumber = getNumber(year);
String monthNumber = getNumber(month);
String dayNumber = getNumber(day);
if (yearNumber != null && monthNumber != null && dayNumber != null) {
String dateStr = yearNumber.concat("-").concat(monthNumber)
.concat("-").concat(dayNumber);
DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
try {
date = format.parse(dateStr);
} catch (ParseException e) {
} finally {
}
}
return date;
}
/**
* 将大写转为小写阿拉伯数据string
*
* @param str
* @return
*/
private static String getNumber(String str) {
String number = "";
str = str.replace(" ", "").replace("拾", "十");
int strLength = str.length();
String lastStr = str.substring(strLength - 1);
// 若str为十或拾 则直接返回10
if (strLength == 1 && ("十".equals(str))) {
return num_shi;
}
// 若str为几十例如贰拾或二十则将十或拾替换为零
else if (strLength == 2 && ("十".equals(lastStr))) {
str = str.replace("十", "零");
} else if (strLength == 3) {
str = removeTen(str);
}
// 将大写转为小写阿拉伯数据
strLength = str.length();
for (int i = 0; i < strLength; i++) {
char s = str.charAt(i);
String temp = cnNumeric.get(str.charAt(i));
number = number.concat(temp);
}
return number;
}
/**
* 判断移除十的类型
*
* @param numArrayTwo
* @return
*/
private static String removeTen(String str) {
char[] numArray = str.toCharArray();
String numArrayTwo = String.valueOf(numArray[1]);
if ("十".equals(numArrayTwo)) {
numArray = remove(numArray, '十');
str = String.valueOf(numArray);
}
return str;
}
/**
* 若十或拾在中间,将其移除
*
* @param arr
* @param num
* @return
*/
private static char[] remove(char[] arr, char num) {
char[] tmp = new char[arr.length - 1];
int idx = 0;
boolean hasRemove = false;
for (int i = 0; i < arr.length; i++) {
if (!hasRemove && arr[i] == num) {
hasRemove = true;
continue;
}
tmp[idx++] = arr[i];
}
return tmp;
}
}
时间转换工具类
猜你喜欢
转载自blog.csdn.net/bii_yu/article/details/80880752
今日推荐
周排行