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

日期格式化失败求助:将指定日期转为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);
}
关键说明与优化建议
  1. 解析和格式化要分开:解析必须用输入日期的格式,格式化用你想要输出的格式,不能混用同一个SimpleDateFormat实例(另外注意:SimpleDateFormat不是线程安全的,最好每次创建新实例,或者使用线程安全的替代方案)。
  2. 如果你的项目是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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 03:42:33