Java:String时间转Date工具类

java初学新手上路的第一篇博客。字符串转Date,因为字符串的格式很多转换很麻烦所以把我能想到的情况写了下来。代码很丑有幸能被路过的你看到还请不吝赐教。

String时间转Date

	public class TimeStrToDate {
	    private static final String[] timeFormat = {
	            "HH:mm",
	            "HH:mm:ss",
	            "HH:mm:ss.SSS",
	            "HH:mm:ss,SSS",
	            "HH时mm分ss秒",
	            "HH时mm分",
	            "HH时"
	    };
	    private static final String[] dateFormat = {
	            "yyyy-MM-dd",
	            "yyyy/MM/dd",
	            "yyyy\\MM\\dd",
	            "yyyy.MM.dd",
	            "yyyy年MM月dd日",
	            "yyyy年MM月dd号"
	    };
	
	    private static final String[] timeArr = {
	            //17:30
	            "^[\\d]{1,2}:[\\d]{1,2}$",
	            //17:30:21
	            "^[\\d]{1,2}:[\\d]{1,2}:[\\d]{1,2}$",
	            //17:30:21.123
	            "^[\\d]{1,2}:[\\d]{1,2}:[\\d]{1,2}[\\.][\\d]{3}$",
	            //17:30:21,123
	            "^[\\d]{1,2}:[\\d]{1,2}:[\\d]{1,2}[,][\\d]{3}$",
	            //17时30分21秒
	            "^[\\d]{1,2}时[\\d]{1,2}分[\\d]{1,2}秒$",
	            //17时30分
	            "^[\\d]{1,2}时[\\d]{1,2}分$",
	            //17时
	            "^[\\d]{1,2}时$"
	    };
	
	    private static final String[] dateArr = {
	            //2020-06-01
	            "^[\\d]{4}[-][\\d]{1,2}[-][\\d]{1,2}$",
	            //2020/06/01
	            "^[\\d]{4}[/][\\d]{1,2}[/][\\d]{1,2}$",
	            //2020\06\01
	            "^[\\d]{4}\\[\\d]{1,2}\\[\\d]{1,2}$",
	            //2020.06.01
	            "^[\\d]{4}[.][\\d]{1,2}[.][\\d]{1,2}$",
	            //2020年06月01日
	            "^[\\d]{4}年[\\d]{1,2}月[\\d]{1,2}日$",
	            //2020年06月01号
	            "^[\\d]{4}年[\\d]{1,2}月[\\d]{1,2}号$"
	    };
	
	
	    private static final String[] noBlankArr = {
	            //2020年
	            "^[\\d]{4}(年)$",
	            //2020年6月
	            "^[\\d]{4}(年)[\\d]{1,2}(月)$",
	            //2020年6月1日
	            "^[\\d]{4}(年)[\\d]{1,2}(月)[\\d]{1,2}(日)$",
	            //2020年6月1日17时
	            "^[\\d]{4}(年)[\\d]{1,2}(月)[\\d]{1,2}(日)[\\d]{1,2}(时)$",
	            //2020年6月1日17时25分
	            "^[\\d]{4}(年)[\\d]{1,2}(月)[\\d]{1,2}(日)[\\d]{1,2}(时)[\\d]{1,2}(分)$",
	            //2020年6月1日17时25分16秒
	            "^[\\d]{4}(年)[\\d]{1,2}(月)[\\d]{1,2}(日)[\\d]{1,2}(时)[\\d]{1,2}(分)[\\d]{1,2}(秒)$",
	            //20200601
	            "^[\\d]{8}$",
	            //202006010957
	            "^[\\d]{12}$",
	            //20200601095720
	            "^[\\d]{14}$",
	            //2020-06-01
	            "^[\\d]{4}[-][\\d]{1,2}[-][\\d]{1,2}$",
	            //2020/06/01
	            "^[\\d]{4}[/][\\d]{1,2}[/][\\d]{1,2}$",
	            //2020\06\01
	            "^[\\d]{4}\\[\\d]{1,2}\\[\\d]{1,2}$",
	            //2020.06.01
	            "^[\\d]{4}[.][\\d]{1,2}[.][\\d]{1,2}$",
	            //2020年06月01号
	            "^[\\d]{4}(年)[\\d]{1,2}(月)[\\d]{1,2}(号)",
	            //2020年06月01号12
	            "^[\\d]{4}(年)[\\d]{1,2}(月)[\\d]{1,2}(号)[\\d]{1,2}$",
	            //2020年06月01号12时
	            "^[\\d]{4}(年)[\\d]{1,2}(月)[\\d]{1,2}(号)[\\d]{1,2}(时)$",
	            //2020年06月01号12时12分
	            "^[\\d]{4}(年)[\\d]{1,2}(月)[\\d]{1,2}(号)[\\d]{1,2}(时)[\\d]{1,2}(分)$",
	            //2020年06月01号12时12分12秒
	            "^[\\d]{4}(年)[\\d]{1,2}(月)[\\d]{1,2}(号)[\\d]{1,2}(时)[\\d]{1,2}(分)[\\d]{1,2}(秒)$",
	    };
	
	    private static final String[] noBlankFormat = {
	            "yyyy年",
	            "yyyy年MM月",
	            "yyyy年MM月dd日",
	            "yyyy年MM月dd日HH时",
	            "yyyy年MM月dd日HH时mm分",
	            "yyyy年MM月dd日HH时mm分ss秒",
	            "yyyyMMdd",
	            "yyyyMMddHHmm",
	            "yyyyMMddHHmmss",
	            "yyyy-MM-dd",
	            "yyyy/MM/dd",
	            "yyyy\\MM\\dd",
	            "yyyy.MM.dd",
	            "yyyy年MM月dd号",
	            "yyyy年MM月dd号HH",
	            "yyyy年MM月dd号HH时",
	            "yyyy年MM月dd号HH时mm分",
	            "yyyy年MM月dd号HH时mm分ss秒",
	    };
	
	    /**
	     * @Description: 时间字符串转Date
	     * @Param: 需要转换的时间字符串
	     * @return: Date 转换后的Date类型时间
	     */
	    public static Date parseDate(String dateStr) {
	        if (dateStr == null || "".equals(dateStr)){
	            return null;
	        }
	        Pattern r = Pattern.compile("\\s");
	        Matcher m = r.matcher(dateStr);
	        if (m.find()){
	            String blank = m.group();
	            String[] split = dateStr.split(blank);
	            if (split.length != 2) return null;
	            int dateIndex = Integer.MIN_VALUE, timeIndex = Integer.MIN_VALUE;
	            for (int i = 0; i < dateArr.length; i++) {
	                if (split[0].matches(dateArr[i])){
	                    dateIndex = i;
	                    break;
	                }
	            }
	            for (int i = 0; i < timeArr.length; i++) {
	                if (split[1].matches(timeArr[i])){
	                    timeIndex = i;
	                    break;
	                }
	            }
	            String format = "";
	            try {
	                format = dateFormat[dateIndex] + blank + timeFormat[timeIndex];
	            }catch (IndexOutOfBoundsException e){
	                return null;
	            }
	            return parse(dateStr, format);
	        }else {
	            for (int i = 0; i < noBlankArr.length; i++) {
	                if (dateStr.matches(noBlankArr[i])){
	                    return parse(dateStr, noBlankFormat[i]);
	                }
	            }
	        }
	       return null;
	    }
	
	    /**
	     * 时间转换
	     * @Date: 2020/7/17
	     */
	    private static Date parse(String dateStr, String format){
	        Date date = null;
	        try {
	            date = DateUtils.parseDate(dateStr, format);
	        } catch (ParseException e) {
	            e.printStackTrace();
	        }
	        return date;
	    }
	}
```.js/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值