SpringBoot 日期接收和输出格式化全套 4 种方法(最全总结,记下来够用整个开发生涯)
分两大场景:
- 接收前端日期字符串 → 转 Java Date/LocalDateTime(入参)
- 后端 Java 日期对象 → 返给前端标准字符串(出参)
先统一说明
现在开发推荐用:JDK8 新时间类LocalDate、LocalTime、LocalDateTime不再用老旧Date、Calendar。
一、方式 1:字段单独注解(局部生效)
1)格式化输出(返前端不带 T)
import com.fasterxml.jackson.annotation.JsonFormat; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private LocalDateTime createTime;作用:后端转 JSON 输出时,按指定格式,带时区,去掉中间 T。
2)接收前端日期(普通 JSON 入参)
同样@JsonFormat也能同时负责接收 + 输出前端传2026-05-08 12:30:00能自动解析成 LocalDateTime。
3)表单 / URL 参数接收(非 JSON)
用:@DateTimeFormat
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime beginTime;区别:
@JsonFormat:JSON 传参用@DateTimeFormat:普通表单、url 拼接参数用
二、方式 2:全局配置 application.yml(最简单、企业常用)
不用每个字段加注解,全局统一格式化
spring: jackson: date-format: yyyy-MM-dd HH:mm:ss time-zone: GMT+8生效范围
- 所有
LocalDateTime/Date - 输出自动格式化
- JSON 入参也能自动接收
优点:省事缺点:只能一种全局格式,不能个别字段特殊格式
三、方式 3:自定义 Jackson 全局配置类(最专业、推荐)
写一个配置类,全局统一序列化、反序列化规则可以统一指定:
- 日期格式
- 空值处理
- 时区
- 全局去掉 T
@Configuration public class JacksonConfig { private static final String PATTERN = "yyyy-MM-dd HH:mm:ss"; @Bean public ObjectMapper objectMapper() { ObjectMapper mapper = new ObjectMapper(); SimpleModule module = new SimpleModule(); // 序列化:LocalDateTime → 字符串 module.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(PATTERN))); // 反序列化:字符串 → LocalDateTime module.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(PATTERN))); mapper.registerModule(module); // 设置时区 mapper.setTimeZone(TimeZone.getTimeZone("GMT+8")); return mapper; } }最强方案:一次配置,全局所有日期自动格式化,不用加任何注解。
四、方式 4:手动工具类转换(灵活自定义)
什么时候用?接口里个别字段要特殊格式,跟全局不一样时。
// 日期转字符串 DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); String timeStr = LocalDateTime.now().format(fmt); // 字符串转日期 LocalDateTime time = LocalDateTime.parse("2026-05-08 10:00:00", fmt);缺点:要自己手动写代码,不优雅;优点:格式随心所欲。
五、四种方式对比总结(直接背)
表格
| 方式 | 作用范围 | 接收日期 | 输出日期 | 适用场景 |
|---|---|---|---|---|
| @JsonFormat | 单个字段 | ✅ 支持 | ✅ 支持 | 个别字段特殊格式 |
| @DateTimeFormat | 单个字段 | ✅ 表单 / URL 参数 | ❌ 不控制输出 | 普通表单提交 |
| yml 全局配置 | 全局所有 | ✅ 支持 | ✅ 支持 | 小项目、格式统一 |
| Jackson 配置类 | 全局所有 | ✅ 支持 | ✅ 支持 | 企业项目、规范统一 |
| 工具类手动格式化 | 代码手动 | ✅ 自己处理 | ✅ 自己处理 | 特殊定制格式 |