关于Java自动识别日期并且转换成为指定日期

在Excel或者CSV文件中有许多的不同格式的日期,之前BOSS提了一个需求要求能够将中英文等等许多不同的格式自动转换为指定的日期格式。 经过资料查阅从Java lang3包中发现了一个parseDate的函数,代码如下

package cn.com.cisdi.bigdata.csv.misc;

import java.util.*;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import static org.apache.commons.lang3.time.DateUtils.parseDate;
import static org.apache.poi.hssf.usermodel.HSSFDataFormat.getBuiltinFormat;

public class Main {
    private static Date ff;

    private static final String [] partterns2 = new String[6];

    static {
        partterns2[0]="HH:mm:ss";
        partterns2[1]="HH:mm";
        partterns2[2]="HH时mm分ss秒";
        partterns2[3]="mm分ss秒";
        partterns2[4]="HH时mm分";
        partterns2[5]="HH时mm分ss";

    }
    private static final String[] partterns1_C =new  String[18];
    static{
        partterns1_C[0] = "yyyy/MM/dd";
        partterns1_C[1] = "yyyy/MM/dd";
        partterns1_C[2] = "MM/dd/yyyy";
        partterns1_C[3] = "M/dd";
        partterns1_C[4] = "yyyyMMdd";
        partterns1_C[5] = "yyyy年MM月dd日";
        partterns1_C[6] = "yyyy年M月dd日";
        partterns1_C[7] = "yyyy年M月d日";
        partterns1_C[8] = "yyyy年MM月d日";
        partterns1_C[9] = "MM月dd日";
        partterns1_C[10] = "M月dd日";
        partterns1_C[11] = "MM月d日";
        partterns1_C[12] = "M月d日";
        partterns1_C[13] = "yyyy年MM月";
        partterns1_C[14] = "yyyy年M月";
        partterns1_C[15] = "yyyyMM";
        partterns1_C[16] = "yyyy.MM.dd";
        partterns1_C[17] = "yyyy.MM";
    }
    private  static final String[] partterns1_E=new String[11];
    static{
        partterns1_E[0] = "dd-MMM-yy";
        partterns1_E[1] = "dd-MMM";
        partterns1_E[2] = "dd-MMM-yyyy";
        partterns1_E[3] = "d-MMM";
        partterns1_E[4] = "d-MMM-yyyy";
        partterns1_E[5] = "d-MMM-yy";
        partterns1_E[6] = "MMM d";
        partterns1_E[7] = "MMM dd";
        partterns1_E[8] = "MMM-dd";
        partterns1_E[9] = "MMM-d";
        partterns1_E[10] = "MMM d,yyyy";
    }


    private static String TimeConvert(String str2) throws ParseException {

        //--------------------中文日期---------

        ff = parseDate(str2, partterns2);

        SimpleDateFormat sdf2 = new SimpleDateFormat("HH:mm:ss");
        return sdf2.format(ff);
    }

    private static String DateConvert(String str1) throws ParseException {


        if (str1.matches(".*\\p{Alpha}.*")) {
            ff = parseDate(str1, Locale.ENGLISH, partterns1_E);
        } else {
            ff =  parseDate(str1, partterns1_C);
        }
        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd");
        return sdf2.format(ff);
    }


    private static String getDate(String date) throws ParseException {
        String FinalString =null;
        if (date.length() <= 10) {
            if (date.contains(":") || (date.contains("时") || date.contains("分") || date.contains("秒"))) {
              FinalString = TimeConvert(date);
            }
            if (date.contains("年") || date.contains("月") || date.contains("日")||date.matches(".*\\p{Alpha}.*")||date.contains("/")||date.contains(".")) {
               FinalString = DateConvert(date);
            }
            else{
                FinalString = DateConvert(date);
            }
        } else {
            String str1 = date.split(" ")[0];
            String str2 = date.substring(date.indexOf(" ") + 1);
            String result1 = DateConvert(str1);
            String result2 = TimeConvert(str2);
            FinalString = result1 + " " + result2;
        }
        return FinalString;
    }
    public static void main(String args[]) throws ParseException {
        String date[]={"2008/07/30",
        "20080730 05:07:30",
        "2008年7月30日 05:07:30",
        "2008年7月 05:06:30",
        "7月30日 05:06:30",
        "200807 05:06:30",
        "2008.07.30 05:06:30",
        "2008.07 05:06:30",
        "30-Jun-08 05:06:30",
        "30-Jun-2008 05:06:30",
        "30-Jun 05:06:30",
        };
        for (String n:date){
            System.out.println(getDate(n));
        }
              {

        }
    }

}
 
主方法为测试类,关键是
.apache.commons.lang3.time中的parseDate函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值