Java字符串日期解析异常:如何将20/03/2018,18:20:44转为日期格式?
解决Java日期解析异常的问题
嘿,我一眼就发现你代码里的问题啦!出现unable to parse date异常,完全是因为用错了日期格式符——这是个很常见的小疏忽~
错误原因分析
你写的格式字符串是"dd/mm/yyyy hh:mm:ss",这里有两个关键错误:
- 小写的
mm代表的是分钟,而你要表示的月份应该用大写的MM - 小写的
hh是12小时制的小时数,你的时间是18点(属于24小时制),必须换成大写的HH
修正后的代码
把格式字符串改对之后,就能正常解析了,这里是修正后的版本:
public static Date getDate(String dateString) { DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); formatter.setTimeZone(TimeZone.getTimeZone("PST")); try { Date date = formatter.parse(dateString); return date; } catch (ParseException e) { logger.error("Error while parsing date string: " + dateString, e); } return null; }
额外建议(Java 8+)
如果你用的是Java 8或更高版本,非常推荐使用java.time包下的新日期API——它不仅线程安全,API设计也更清晰。这里给你一个示例:
import java.time.LocalDateTime; import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeParseException; import java.util.Date; public static LocalDateTime getLocalDateTime(String dateString) { // 推荐用完整的时区ID代替缩写,避免歧义 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss") .withZone(ZoneId.of("America/Los_Angeles")); try { return LocalDateTime.parse(dateString, formatter); } catch (DateTimeParseException e) { logger.error("Error while parsing date string: " + dateString, e); return null; } } // 如果需要转换为旧的Date对象 public static Date convertToDate(LocalDateTime localDateTime) { return Date.from(localDateTime.atZone(ZoneId.of("America/Los_Angeles")).toInstant()); }
内容的提问来源于stack exchange,提问作者Ashok Kumar
相关产品推荐
相关产品推荐

