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

求助:将Java Date对象转换为纯数字日期格式

解决SimpleDateFormat格式化返回对象标识而非日期字符串的问题

咱们一步步拆解你遇到的问题,轻松搞定它:

问题根源

你看到的java.text.SimpleDateFormat@7147a660其实是SimpleDateFormat对象的默认toString()输出,说明两个关键问题:

  1. 你可能误输出了格式化器对象本身,而不是format()方法返回的格式化字符串;
  2. 从Solr拿到的tmp是Object类型,直接传给format可能存在类型不匹配的隐患(虽然DateFormat有format(Object)重载,但必须确保底层是Date实例才能正确处理)。

修复方案(旧API写法)

先把Object转成Date,再正确获取格式化后的字符串:

// 先将Solr返回的Object强制转换为Date(确认Solr的date_from字段确实返回Date类型)
Date dateFromSolr = (Date) solrDoc.getFieldValue("date_from");
// 初始化日期格式化器
DateFormat dateFormatter = new SimpleDateFormat("dd.MM.yyyy");
// 调用format方法得到格式化后的字符串,并用变量接收或直接输出
String formattedDate = dateFormatter.format(dateFromSolr);
System.out.println(formattedDate); // 预期输出:10.03.1987

更推荐的Java 8+新日期API

SimpleDateFormat是线程不安全的,旧DateAPI设计也有不少缺陷,建议使用java.time包的类来处理,更稳定可靠:

// 转换为Date后,转成UTC时区的LocalDate(Solr日期默认是UTC时区)
Date dateFromSolr = (Date) solrDoc.getFieldValue("date_from");
LocalDate localDate = dateFromSolr.toInstant().atZone(ZoneId.of("UTC")).toLocalDate();
// 使用线程安全的DateTimeFormatter格式化
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy");
String formattedDate = localDate.format(formatter);
System.out.println(formattedDate); // 预期输出:10.03.1987

额外提醒

  • 如果Solr返回的date_from是字符串类型,需要先把字符串解析成日期再格式化;
  • 多线程环境下,SimpleDateFormat不能共享实例,而DateTimeFormatter是线程安全的,可以复用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:41:31