java转换中文日期(二零一七年四月二十日、○九年四月三十日)

不废话,直接上代码

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();
    }

本文转载自:java 中文日期转换_Java将中文日期转换为日期_linglingqun的博客-CSDN博客

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值