不废话,直接上代码
public static void main(String args[]) {
List<String> list = Lists.newArrayList("二○○九年四月三十日", "○九年四月三十日", "二○○九年十二月三十一日", "二零零九年十二月三十一日");
for (String s : list) {
System.out.println(convertDate(s));
}
}
//把二〇一四年三月七日转换成2014-03-07
//可能出现的格式一四年三月七日
public static String convertDate(String dateCn) {
int yearPos = dateCn.indexOf("年");
String year = dateCn.substring(0, yearPos);
int monthPos = dateCn.indexOf("月");
String month = dateCn.substring(yearPos + 1, monthPos);
int dayPos = dateCn.indexOf("日");
String day = dateCn.substring(monthPos + 1, dayPos);
year = convertCnDateNumber(year);
month = convertCnDateNumber(month);
day = convertCnDateNumber(day);
return (year.length() == 2 ? "20" + year : year) + "-" + (month.length() == 1 ? "0" + month : month) + "-" + (day.length() == 1 ? "0" + day : day);
}
private static String convertCnDateNumber(String cnNumber) {
if (cnNumber == null) {
return null;
}
if (cnNumber.length() == 1) {
if ("十".equals(cnNumber)) {
return "10";
} else {
return convertCnNumberChar(cnNumber);
}
} else if (cnNumber.length() == 2) {
if (cnNumber.startsWith("十")) {
return "1" + convertCnNumberChar(cnNumber.substring(1, 2));
} else if (cnNumber.endsWith("十")) {
return convertCnNumberChar(cnNumber.substring(0, 1)) + "0";
} else {
return convertCnNumberChar(cnNumber);
}
} else if (cnNumber.length() == 3) {
return convertCnNumberChar(String.valueOf(cnNumber.charAt(0)) + String.valueOf(cnNumber.charAt(2)));
} else {
return convertCnNumberChar(cnNumber);
}
}
private static String convertCnNumberChar(String cn) {
String allCnNum = "一二三四五六七八九";
String allNum = "123456789";
StringBuilder sb = new StringBuilder();
for (int i = 0; i < cn.length(); i++) {
int index = allCnNum.indexOf(cn.charAt(i));
if (-1 != index) {
sb.append(allNum.charAt(index));
} else {
//兼容年份中的0、零或其他特殊o字符
sb.append("0");
}
}
return sb.toString();
}