// 预定义常见的时间格式模板(保持不变)
    private static final List<String> COMMON_PATTERNS = new ArrayList<String>() {{
        // 带时区的格式(如:Sat Dec 13 00:00:00 CST 2025)
        add("EEE MMM dd HH:mm:ss zzz yyyy");
        add("EEE, MMM dd, yyyy HH:mm:ss zzz");
        // 标准ISO格式
        add("yyyy-MM-dd'T'HH:mm:ssXXX");
        add("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
        // 不带时区的常见格式
        add("yyyy-MM-dd HH:mm:ss");
        add("yyyy/MM/dd HH:mm:ss");
        add("yyyy年MM月dd日 HH:mm:ss");
        add("dd-MM-yyyy HH:mm:ss");
        add("MM/dd/yyyy HH:mm:ss");
        // 仅日期格式
        add("yyyy-MM-dd");
        add("yyyy/MM/dd");
        add("dd-MM-yyyy");
    }};

    /**
     * 自动解析时间字符串,并转换为目标格式(修复 Locale 问题)
     */
    public static String parseAndFormat(String timeStr, String targetPattern) {
        if (timeStr == null || timeStr.trim().isEmpty() || targetPattern == null) {
            throw new IllegalArgumentException("时间字符串和目标格式不可为空");
        }

        // 尝试所有预定义格式解析
        for (String pattern : COMMON_PATTERNS) {
            try {
                // 创建格式器时指定 Locale.ENGLISH(关键修复)
                DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern, Locale.ENGLISH);

                if (pattern.contains("zzz") || pattern.contains("XXX")) {
                    // 带时区的格式解析
                    ZonedDateTime zonedDateTime = ZonedDateTime.parse(timeStr, formatter);
                    return zonedDateTime.format(DateTimeFormatter.ofPattern(targetPattern));
                } else {
                    // 不带时区的格式解析
                    LocalDateTime localDateTime = LocalDateTime.parse(timeStr, formatter);
                    return localDateTime.format(DateTimeFormatter.ofPattern(targetPattern));
                }
            } catch (DateTimeParseException e) {
                continue; // 解析失败,尝试下一个格式
            }
        }

        System.err.println("无法解析时间字符串:" + timeStr);
        return null;
    }

        String s = parseAndFormat("Sat Dec 13 00:00:00 CST 2025", "yyyy-MM-dd");
        System.out.println("s = " + s);

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐