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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:58:12