正则匹配时间格式

代码是从项目里抽出来的,没有细整理。应用场景是在码值翻译的时候,需要把不同格式的时间翻译一下。我们的项目是导入zip包,保存老数据,思路是先去判断xml文件里面的时间是什么格式的,然后根据具体的格式转换。
Docking annotation = field.getAnnotation(Docking.class);
String format = annotation.dateFormat();
if (value.trim().length() == 10) {
    format = "yyyy-MM-dd";
} else if (value.trim().length() == 8) {
    format = "yyyyMMdd";
} else if (value.trim().length() == 4) {
    format = "yyyy";
} else if (value.trim().length() == 6) {
    format = "yyyyMM";
} else if (value.trim().length() == 19) {
    format = "yyyy-MM-dd HH:mm:ss";
}
Date date = DateUtil.stringToDateFormat(value, format);
field.set(t, date);

public static Date stringToDateFormat(String date, String format) throws Exception{
    //        时间格式:yyyyMMddHHmmss.例如:20161213232255
    String yMdHms = "^((([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})" +
            "(((0[13578]|1[02])(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)(0[1-9]|[12][0-9]|30))|" +
            "(02(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|" +
            "((0[48]|[2468][048]|[3579][26])00))0229))([0-1]?[0-9]|2[0-3])([0-5][0-9])([0-5][0-9])$";
    if(Pattern.matches(yMdHms, date)){
        format = "yyyyMMddHHmmss";
    }
    //        精确到日即可,即年月日,格式:yyyyMMdd,例如:20161213
    String yMd = "^((([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})(((0[13578]|1[02])" +
            "(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)(0[1-9]|[12][0-9]|30))|(02(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})" +
            "(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))0229))$";
    if(Pattern.matches(yMd, date)){
        format = "yyyyMMdd";
    }
    // 精确到日即可,即年月日,格式:yyyy-MM-dd,例如:2016-12-13
    String yMd2 = "^((([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])" +
            "-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|" +
            "((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29))$";
    if(Pattern.matches(yMd2, date)){
        format = "yyyy-MM-dd";
    }
    //        校验时分秒:格式:HHmmss
    String Hms = "([0-1]?[0-9]|2[0-3])([0-5][0-9])([0-5][0-9])$";
    if(Pattern.matches(Hms, date)){
        format = "HHmmss";
    }
    //        校验时分秒:格式:HH-mm-ss
    String Hms2 = "([0-1]?[0-9]|2[0-3])-([0-5][0-9])-([0-5][0-9])$";
    if(Pattern.matches(Hms2, date)){
        format = "HH-mm-ss";
    }
    String Hms3 = "([0-1]?[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$";
    if(Pattern.matches(Hms3, date)){
        format = "HH:mm:ss";
    }

    //        校验 yyyy-MM-dd HH:mm:ss(日期和时间之间有一个或多个空格)
    String defaultFormat = "^((([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-" +
            "(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|" +
            "(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|" +
            "((0[48]|[2468][048]|[3579][26])00))-02-29))\\s+([0-1]?[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$";
    if(Pattern.matches(defaultFormat, date)){
        format = "yyyy-MM-dd HH:mm:ss";
    }
    Date date1 = null;
    try {
        SimpleDateFormat mySimpleDateFormat = new SimpleDateFormat(format);
        date1 = mySimpleDateFormat.parse(date);
    } catch (Exception e) {
        logger.error("日期字段转换,待转换值:" + date + ",无法转换成日期");
        throw e;
    }
    return date1;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值