Java 时间字符串转特定格式
·
// 预定义常见的时间格式模板(保持不变)
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);
更多推荐

所有评论(0)