使用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
相关产品推荐
相关产品推荐

