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

SimpleDateFormat无法正确解析日期:问题排查及解决方案咨询

问题分析与解决方案

兄弟,你这问题核心就是格式字符串和待解析的日期结构完全不匹配啊!

你定义的格式是MM-dd-yyyy(对应「月-日-年」的顺序),但要解析的字符串2013-12-28是「年-月-日」的结构,两者完全对不上号。而且这里还有个SimpleDateFormat的坑:它默认是宽松解析模式,有时候不会直接抛错,反而会强行“凑”出一个错误的日期(比如把2013当成月份、12当成日期、28当成年份的一部分),这反而让你误以为是其他问题。

修复步骤(基于SimpleDateFormat)

  1. 匹配正确的格式字符串:把dformat改成和目标日期一致的yyyy-MM-dd
  2. 开启严格解析模式:调用setLenient(false),确保格式不匹配时直接抛出异常,符合你预期的报错行为

修复后的代码示例:

String dformat = "yyyy-MM-dd"; // 改成与待解析字符串匹配的格式
String cDate = "2013-12-28";
SimpleDateFormat f = new SimpleDateFormat(dformat);
f.setLenient(false); // 关闭宽松解析,格式不匹配直接抛错
try {
    Date dd = f.parse(cDate);
    System.out.println(dd);
} catch (ParseException e) {
    e.printStackTrace();
}

更优的替代方案(Java 8+)

如果你使用的是Java 8及以上版本,强烈建议抛弃老旧的SimpleDateFormat,改用java.time包下的类(线程安全、API更清晰、无隐藏坑)。示例代码如下:

String cDate = "2013-12-28";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
try {
    LocalDate date = LocalDate.parse(cDate, formatter);
    System.out.println(date);
} catch (DateTimeParseException e) {
    e.printStackTrace();
}

内容的提问来源于stack exchange,提问作者George Hernando

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:37:53