开发

软件开发相关知识

java中任意时间字符串的格式化提取

java中任意时间字符串的格式化提取,不管是-还是/,都可以提取为标准的 yyyy-MM-dd HH:mm:ss格式。

代码如下:

/**
 * 任意包含时间的字符串格式,标准化提取为 yyyy-MM-dd HH:mm:ss的格式
 *
 * @param strDate
 * @return 提取失败,返回null
 */
public static String String2DateString(String strDate) {
    // 正则表达式用于匹配常见的时间格式
    String regex = "(\\d{4}[-/]?((0[1-9]|1[012])[-/](0[1-9]|[12][0-9]|3[01]))|([01]?[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9])";
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(strDate);

    SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    while (matcher.find()) {
        String timeStr = matcher.group();
        System.out.println("Found time: " + timeStr);

        try {
            // 尝试用不同的格式解析时间
            Date date = null;
            if (timeStr.contains(":")) { // 包含时分秒
                if (timeStr.contains("-") || timeStr.contains("/")) {
                    // yyyy-MM-dd HH:mm:ss 或者 yyyy/MM/dd HH:mm:ss
                    inputFormat.applyPattern("yyyy-MM-dd HH:mm:ss");
                } else {
                    // HH:mm:ss
                    inputFormat.applyPattern("HH:mm:ss");
                }
            } else if (timeStr.contains("-") || timeStr.contains("/")) { // 只有日期
                if (timeStr.contains("-")) {
                    // yyyy-MM-dd
                    inputFormat.applyPattern("yyyy-MM-dd");
                } else {
                    // yyyy/MM/dd
                    inputFormat.applyPattern("yyyy/MM/dd");
                }
            }

            date = inputFormat.parse(timeStr);

            // 格式化为统一的输出格式
            String formattedDate = outputFormat.format(date);

            //System.out.println("Formatted: " + formattedDate);
            return formattedDate;
        } catch (ParseException e) {
            //System.err.println("Unable to parse the time string: " + timeStr);
        }
    }
    return null;
}