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

解析日期字符串"1/10/24 7:00 PM"遇ParseException,如何用SimpleDateFormat解决?

解决SimpleDateFormat解析"1/10/24 7:00 PM"的ParseException问题

你当前代码抛出解析异常的核心原因是:使用了无参的SimpleDateFormat()构造方法,它会采用系统默认的日期格式(和目标字符串"1/10/24 7:00 PM"的结构完全不匹配),导致无法解析。

要正确解析这个日期字符串,必须给SimpleDateFormat指定完全匹配目标字符串结构的格式模式,同时注意时区和Locale的设置:

格式模式对应说明

目标字符串"1/10/24 7:00 PM"的结构对应:

  • M/d/yy:月份(1位或2位)/日期(1位或2位)/两位年份(24会被解析为2024)
  • h:mm a:12小时制小时(1位或2位)/分钟/上午/下午标记(AM/PM)

修改后的完整代码

String date_time = "1/10/24 7:00 PM";
Instant answer;
try {
    answer = Instant.parse(date_time);
} catch(DateTimeParseException ex) {
    // 指定匹配格式+英文Locale,避免AM/PM因系统语言无法识别
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("M/d/yy h:mm a", Locale.US);
    simpleDateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
    answer = simpleDateFormat.parse(date_time).toInstant();
    System.out.println(answer);
}

关键细节说明

  1. 格式模式必须和目标字符串的每一部分严格对应:比如月份是1位就用M(两位则用MM),日期同理用d,两位年份用yy
  2. 加上Locale.US是为了避免系统默认Locale非英文时,AM/PM标记无法被识别的问题
  3. 设置时区为UTC后,解析出的Date转换为Instant时会保持UTC时间戳的准确性

内容的提问来源于stack exchange,提问作者Shivam Agrawal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 21:58:28