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

使用Jsoup解析网站日期遇ParseException:西里尔日期字符串无法解析

解决西里尔字符日期解析的ParseException问题

嘿,这个问题我熟!你碰到的异常完全是因为日期解析器默认用的是英文Locale,根本认不出俄语的月份名称(比如"апреля")。别着急,按下面的方法就能搞定:

核心思路

日期格式化工具需要知道当前日期字符串的语言环境,所以必须指定俄语Locale,这样它才能正确匹配西里尔语的月份、日期表述。

方案1:Java 8+ 推荐使用 DateTimeFormatter

现在主流项目都用Java 8及以上的日期API了,这个方案更简洁且线程安全:

// 从Jsoup获取的俄语日期字符串
String russianDate = "1 апреля 2018";
// 处理可能的首尾空格(避免解析失败)
russianDate = russianDate.trim();

// 指定俄语Locale和匹配的日期格式:d是日,MMMM是完整月份名,yyyy是年
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("d MMMM yyyy", new Locale("ru"));
LocalDate parsedDate = LocalDate.parse(russianDate, formatter);

// 验证输出,会得到标准的日期格式
System.out.println(parsedDate); // 输出:2018-04-01

方案2:旧版Java(Java 7及以下)用 SimpleDateFormat

如果你的项目还在维护旧版代码,可以用这个方案,但要注意SimpleDateFormat是非线程安全的:

String russianDate = "1 апреля 2018";
russianDate = russianDate.trim();

SimpleDateFormat sdf = new SimpleDateFormat("d MMMM yyyy", new Locale("ru"));
Date parsedDate = sdf.parse(russianDate);

// 按需格式化输出
System.out.println(sdf.format(parsedDate)); // 输出:1 апреля 2018

额外注意事项

  • 日期格式串要和目标字符串完全匹配:比如你的日期是“日 月份 年”,就用d MMMM yyyy;如果是缩写月份(比如"1 апр 2018"),就要把格式串改成d MMM yyyy。
  • 确保JDK包含俄语Locale支持:大部分标准JDK都自带,除非是极度精简的版本,这种情况需要额外配置Locale资源包。

内容的提问来源于stack exchange,提问作者Sam Kilanoff

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:57:57