Java解析yyyy MMM d HH:mm:ss日期报Unparseable date异常如何解决
异常原因
你的代码抛出Unparseable date异常核心是SimpleDateFormat的月份格式MMM和默认语言环境不匹配:
MMM是月份的本地化短文本表示,SimpleDateFormat默认会取JVM当前运行环境的系统Locale,比如中文环境下MMM对应的是「一月」「二月」这类中文月份缩写,而你待解析的字符串里的月份是英文缩写Mar,默认非英文Locale下无法识别该字符串。
解决办法
构造SimpleDateFormat的时候显式指定英文Locale就可以正常解析了,修改后的代码如下:
import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; public class DateParseDemo { public static void main(String[] args) throws Exception { String s = "2020 Mar 11 11:09:42"; // 构造时指定英文Locale,保证MMM按英文月份缩写解析 SimpleDateFormat formatter = new SimpleDateFormat("yyyy MMM d HH:mm:ss", Locale.US); Date parsedDate = formatter.parse(s); } }
Java 8+优化方案
如果使用JDK8及更高版本,更推荐用java.time包下的线程安全类完成解析,避免SimpleDateFormat的线程安全隐患,示例代码如下:
import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.Locale; public class DateParseDemo { public static void main(String[] args) { String s = "2020 Mar 11 11:09:42"; DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy MMM d HH:mm:ss", Locale.US); LocalDateTime parsedDate = LocalDateTime.parse(s, formatter); } }
内容的提问来源于stack exchange,提问作者user16516510
相关产品推荐
相关产品推荐

