java 字符串转时间 不限输入格式

java 字符串转时间 不限输入格式

由于导入Excel数据时, 用户有时会以文本格式输入日期字符串, 导致后台poi读取Excel时报错
但是用户输入的格式没办法提前判断, 所有动手用正则判断写了工具类

	/**
	 * 字符串转时间, 可识别常见类型
	 * @param str 要转换的格式
	 * @return 转化后的时间
	 * @throws Exception .
	 */
	public static Date parseDate(String str) throws Exception {
		str = str.trim();
		String pattern = "\\d{4}([^\\d]?)\\d{1,2}\\1\\d{1,2}( \\d{1,2}([^\\d])\\d{1,2})?";
		// 创建 Pattern 对象
		Pattern r = Pattern.compile(pattern);
		// 现在创建 matcher 对象
		Matcher m = r.matcher(str);
		String dateSplit, timeSplit;
		if (m.find()) {
			dateSplit = m.group(1);
			timeSplit = m.group(3);
			String formatStr = String.format("yyyy%sMM%sdd", dateSplit, dateSplit);
			if (timeSplit != null) {
				String timeStr = str.substring(str.indexOf(" "));
				String[] split = timeStr.split(timeSplit);
				if (split.length == 2) {
					formatStr += String.format(" HH%smm", timeSplit);
				}
				if (split.length > 2) {
					formatStr += String.format(" HH%smm%sss", timeSplit, timeSplit);
				}
			}
			SimpleDateFormat simpleDateFormat = new SimpleDateFormat(formatStr);
			return simpleDateFormat.parse(str);
		} else {
			throw new Exception("输入的时间格式不符");
		}
	}

测试代码

    @Test
    public void test() throws Exception {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date1 = DateUtils.parseDate("2020-1-1");
        System.out.println(format.format(date1));
        Date date2 = DateUtils.parseDate("20200131");
        System.out.println(format.format(date2));
        Date date3 = DateUtils.parseDate("2020/10/02 10:12:16");
        System.out.println(format.format(date3));
        Date date4 = DateUtils.parseDate("2020-10-02 10:12");
        System.out.println(format.format(date4));
    }

结果输出

2020-01-01 00:00:00
2020-01-31 00:00:00
2020-10-02 10:12:16
2020-10-02 10:12:00

你可能感兴趣的:(java,正则表达式)