Java转换带星期的日期字符串抛出DateTimeParseException如何处理
问题原因
报错提示在字符串索引0位置解析失败,核心是DateTimeFormatter默认使用JVM当前运行环境的Locale:如果你的系统默认Locale为非英语区域(比如中文Locale),无法识别英文星期缩写Mon,就会抛出解析异常。
解决方案
方案1:无需修改原字符串,直接指定Locale转换(推荐)
只需要在创建DateTimeFormatter时指定对应英文区域的Locale即可,代码示例:
import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.Locale; public class Main { public static void main(String[] args) { String s = "Mon, 11-12-2021 - 12:00"; // 构造格式化器时指定英文Locale,识别英文星期缩写 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEE, MM-dd-yyyy - HH:mm", Locale.US); LocalDateTime localDateTime = LocalDateTime.parse(s, formatter); } }
方案2:调整原字符串后转换
如果确实不想指定Locale,也可以先把字符串前的星期标识移除,再调整匹配规则:
String s = "Mon, 11-12-2021 - 12:00"; // 截取逗号后部分的内容 String newStr = s.substring(s.indexOf(",") + 1).trim(); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM-dd-yyyy - HH:mm"); LocalDateTime localDateTime = LocalDateTime.parse(newStr, formatter);
注意事项
要注意格式符的匹配关系:MM代表月份,dd代表日期,如果你给出的示例字符串11-12-2021是12月11日的含义,需要把格式符调整为dd-MM-yyyy。
内容的提问来源于stack exchange,提问作者Natali
相关产品推荐
相关产品推荐

