java 中文日期转换_Java将中文日期转换为日期

直接上代码

public static void main(String[] args) throws IOException {

testConvertZwrq();

}

private static void testConvertZwrq() {

String[] list = new String[] { "二○○九年四月三十日", "○九年四月三十日", "二○○九年十二月三十一日", "二零零九年十二月三十一日" };

for (String s : list) {

Date d = convertCnDate(s);

System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(d));

}

}

public static Date convertCnDate(String cprq) {

int yearPos = cprq.indexOf("年");

int monthPos = cprq.indexOf("月");

String cnYear = cprq.substring(0, yearPos);

String cnMonth = cprq.substring(yearPos + 1, monthPos);

String cnDay = cprq.substring(monthPos + 1, cprq.length() - 1);

String year = ConvertCnYear(cnYear);

String month = ConvertCnDateNumber(cnMonth);

String day = ConvertCnDateNumber(cnDay);

Calendar c = Calendar.getInstance();

c.set(Calendar.YEAR, Integer.parseInt(year));

c.set(Calendar.MONTH, Integer.parseInt(month)-1);

c.set(Calendar.DAY_OF_MONTH, Integer.parseInt(day));

return c.getTime();

}

private static String ConvertCnYear(String cnYear) {

if(cnYear.length() == 2)

return "20" + ConvertCnNumberChar(cnYear);

else

return ConvertCnNumberChar(cnYear);

}

private static String ConvertCnDateNumber(String cnNumber) {

if (cnNumber.length() == 1) {

if(cnNumber.equals("十"))

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(cnNumber.substring(0, 1) + cnNumber.substring(2, 3));

}

return null;

}

private static String ConvertCnNumberChar(String cnNumberStr) {

String ALL_CN_NUMBER = "○零一二三四五六七八九";

String ALL_NUMBER = "00123456789";

StringBuffer buf = new StringBuffer();

for (int i = 0; i < cnNumberStr.length(); i++) {

char c = cnNumberStr.charAt(i);

int index = ALL_CN_NUMBER.indexOf(c);

if (index != -1) {

buf.append(ALL_NUMBER.charAt(index));

} else {

buf.append(cnNumberStr.charAt(i));

}

}

return buf.toString();

}



  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中可以使用数字转换中文大写的方法来实现将日期转换中文大写的功能。具体实现方法如下: 1. 首先,引入需要使用的工具类和包。 ```java import java.util.Calendar; import java.util.Date; import java.text.SimpleDateFormat; ``` 2. 然后,获取当前日期转换中文大写。 ```java // 获取当前日期 Date date = new Date(); // 将日期转换中文大写 String dateStr = DateToCN(date); ``` 3. 编写将日期转换中文大写的方法。 ```java public static String DateToCN(Date date) { // 实例化Calendar对象 Calendar cal = Calendar.getInstance(); // 将日期赋值给Calendar对象 cal.setTime(date); // 获取年份 int year = cal.get(Calendar.YEAR); // 获取月份 int month = cal.get(Calendar.MONTH) + 1; // 获取日 int day = cal.get(Calendar.DAY_OF_MONTH); // 将年份转换中文大写 String yearStr = NumberToCN(year); // 将月份转换中文大写 String monthStr = NumberToCN(month); // 将日转换中文大写 String dayStr = NumberToCN(day); // 拼接日期字符串 String dateStr = yearStr + "年" + monthStr + "月" + dayStr + "日"; return dateStr; } // 将数字转换中文大写 public static String NumberToCN(int number) { // 定义中文数字数组 String[] cnNumbers = {"零", "一", "二", "三", "四", "五", "六", "七", "八", "九"}; // 定义中文数字单位数组 String[] cnUnits = {"", "十", "百", "千", "万", "十", "百", "千", "亿"}; // 将数字转换成字符串 String numberStr = String.valueOf(number); // 定义结果字符串 String result = ""; // 记录是否需要添加“零” boolean needZero = false; // 循环处理数字每一位 for (int i = 0; i < numberStr.length(); i++) { // 获取当前位的数字 int n = numberStr.charAt(i) - '0'; // 获取当前位的中文单位 String unit = cnUnits[(numberStr.length() - 1) - i]; // 判断当前位是否为0 if (n == 0) { // 如果当前位为0,并且前一位不为0,则需要添加“零” if (needZero) { result += cnNumbers[0]; needZero = false; } } else { // 如果当前位不为0,则需要添加当前位的中文数字中文单位 result += cnNumbers[n] + unit; needZero = true; } } // 如果结果字符串以“十”结尾,则需要添加一个“零” if (result.endsWith("十")) { result += cnNumbers[0]; } return result; } ``` 这样就可以将日期转换中文大写了。例如,对于当前日期转换后的字符串为“二零二二年一月二十五日”。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值