You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Java中将格式为Wed Oct 11 08:27:33 CEST 2023的字符串转为日期

Java日期字符串转Date类型解决方案

你的代码解析错误的核心原因是:SimpleDateFormat的格式符XXX用于匹配时区偏移值(如+02:00),但你的日期字符串里的CEST是时区缩写,两者不匹配,导致解析失败。下面提供两种可行的解决方法:

方法一:使用旧版SimpleDateFormat(兼容Java 8之前)

将格式符改为zzz(匹配时区缩写),同时指定英文Locale确保解析英文的星期、月份,还可以明确指定时区避免缩写歧义:

String dateString = "Wed Oct 11 08:27:33 CEST 2023";
// 指定Locale.ENGLISH防止JVM默认非英文环境解析失败
SimpleDateFormat formatter = new SimpleDateFormat("E MMM dd HH:mm:ss zzz yyyy", Locale.ENGLISH);
// 可选:明确指定对应时区(CEST属于中欧夏令时,用Europe/Paris这类时区ID更准确)
formatter.setTimeZone(TimeZone.getTimeZone("Europe/Paris"));
try {
    Date date = formatter.parse(dateString);
    System.out.println(date);
} catch (ParseException e) {
    e.printStackTrace();
}

注意:时区缩写可能存在歧义(比如EST同时代表美国东部标准时间和澳大利亚东部标准时间),因此明确指定时区ID是更稳妥的做法。

方法二:使用Java 8+推荐的新日期API(更安全可靠)

旧版SimpleDateFormat存在线程安全问题,推荐使用java.time包下的API:

String dateString = "Wed Oct 11 08:27:33 CEST 2023";
// 定义格式并指定英文Locale
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("E MMM dd HH:mm:ss zzz yyyy", Locale.ENGLISH);
// 解析为带时区的日期时间,同时指定时区消除缩写歧义
ZonedDateTime zonedDateTime = ZonedDateTime.parse(dateString, formatter.withZone(ZoneId.of("Europe/Paris")));
// 如果需要转换为旧版java.util.Date
Date date = Date.from(zonedDateTime.toInstant());
System.out.println(date);

内容的提问来源于stack exchange,提问作者Ajeet Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 08:59:59