解析日期字符串"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位就用
M(两位则用MM),日期同理用d,两位年份用yy - 加上
Locale.US是为了避免系统默认Locale非英文时,AM/PM标记无法被识别的问题 - 设置时区为UTC后,解析出的
Date转换为Instant时会保持UTC时间戳的准确性
内容的提问来源于stack exchange,提问作者Shivam Agrawal
相关产品推荐
相关产品推荐

