日期格式化失败求助:将指定日期转为dd-MM-yyyy格式出错
嘿,我一眼就看出问题出在哪了——你的代码犯了两个关键错误,才导致这个离谱的日期结果:
问题根源分析
- 解析格式与输入日期不匹配:你传入的日期字符串是
2019-02-12 18:00:40,它的格式是yyyy-MM-dd HH:mm:ss,但你却用SimpleDateFormat("dd-MM-yyyy")去解析它。SimpleDateFormat在解析时如果格式不匹配,不会直接抛出异常(除非手动开启严格模式),而是会尝试“猜测”日期,这就生成了完全错误的Date对象。 - 返回的是Date默认字符串,而非目标格式化结果:你最后调用
date.toString(),这会返回Date类自带的默认格式(比如Wed Aug 11 00:00:00 GMT+02:00 17这种),而不是你想要的dd-MM-yyyy格式。
修复后的代码
private String formatDate(String dateT) throws ParseException { // 第一步:用输入日期对应的格式解析字符串 SimpleDateFormat inputFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = inputFormatter.parse(dateT); // 第二步:用目标格式格式化Date对象 SimpleDateFormat outputFormatter = new SimpleDateFormat("dd-MM-yyyy"); return outputFormatter.format(date); }
关键说明与优化建议
- 解析和格式化要分开:解析必须用输入日期的格式,格式化用你想要输出的格式,不能混用同一个
SimpleDateFormat实例(另外注意:SimpleDateFormat不是线程安全的,最好每次创建新实例,或者使用线程安全的替代方案)。 - 如果你的项目是Java 8或更高版本,强烈推荐使用
java.time包下的新日期API,它不仅线程安全,逻辑也更清晰易懂:
private String formatDate(String dateT) { DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); LocalDateTime dateTime = LocalDateTime.parse(dateT, inputFormatter); DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("dd-MM-yyyy"); return dateTime.format(outputFormatter); }
内容的提问来源于stack exchange,提问作者George
相关产品推荐
相关产品推荐

