Calendar调用setTime抛出"Unparsable date"异常问题求助
解决"Unparsable date"异常问题
你的代码里有两个核心错误导致了这个解析异常,我来帮你逐一修正:
1. 日期格式字符串的关键错误
你写的SimpleDateFormat格式是"yyyy-mm-dd 'T'",这里有两个致命问题:
- 月份必须用大写的
MM,小写的mm代表的是分钟,不是月份——这会让解析器把月份当成分钟来处理,完全不符合目标字符串的格式 - 格式字符串不完整,缺少了时间部分的
HH:mm:ss,和你要解析的"2018-04-14'T'15:38:14"结构不匹配
2. 格式字符串的语法疏漏
你的格式字符串"yyyy-mm-dd 'T'"没有闭合双引号,这会直接导致编译错误(应该是你粘贴代码时的小失误)
修正后的完整可运行代码
Calendar cal = Calendar.getInstance(); // 正确格式:yyyy-MM-dd'T'HH:mm:ss,MM对应月份,HH对应24小时制小时 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd 'T'HH:mm:ss"); try { cal.setTime(sdf.parse("2018-04-14'T'15:38:14")); System.out.println("日期解析成功:" + cal.getTime()); } catch (ParseException e) { e.printStackTrace(); }
额外优化建议
如果你的项目使用Java 8及以上版本,非常推荐使用java.time包下的新日期时间API——它比Calendar和SimpleDateFormat更简洁、线程安全,代码可读性也更高:
// 直接解析字符串为LocalDateTime LocalDateTime dateTime = LocalDateTime.parse("2018-04-14'T'15:38:14", DateTimeFormatter.ISO_LOCAL_DATE_TIME); // 如果需要兼容旧代码转换为Calendar Calendar cal = Calendar.getInstance(); cal.setTime(Date.from(dateTime.atZone(ZoneId.systemDefault()).toInstant()));
内容的提问来源于stack exchange,提问作者Ted pottel
相关产品推荐
相关产品推荐

