SpringBoot 日期接收和输出格式化全套 4 种方法最全总结记下来够用整个开发生涯分两大场景接收前端日期字符串 → 转 Java Date/LocalDateTime入参后端 Java 日期对象 → 返给前端标准字符串出参先统一说明现在开发推荐用JDK8 新时间类LocalDate、LocalTime、LocalDateTime不再用老旧Date、Calendar。一、方式 1字段单独注解局部生效1格式化输出返前端不带 Timport com.fasterxml.jackson.annotation.JsonFormat; JsonFormat(pattern yyyy-MM-dd HH:mm:ss, timezone GMT8) private LocalDateTime createTime;作用后端转 JSON 输出时按指定格式带时区去掉中间 T。2接收前端日期普通 JSON 入参同样JsonFormat也能同时负责接收 输出前端传2026-05-08 12:30:00能自动解析成 LocalDateTime。3表单 / URL 参数接收非 JSON用DateTimeFormatDateTimeFormat(pattern yyyy-MM-dd HH:mm:ss) private LocalDateTime beginTime;区别JsonFormatJSON 传参用DateTimeFormat普通表单、url 拼接参数用二、方式 2全局配置 application.yml最简单、企业常用不用每个字段加注解全局统一格式化spring: jackson: date-format: yyyy-MM-dd HH:mm:ss time-zone: GMT8生效范围所有LocalDateTime/Date输出自动格式化JSON 入参也能自动接收优点省事缺点只能一种全局格式不能个别字段特殊格式三、方式 3自定义 Jackson 全局配置类最专业、推荐写一个配置类全局统一序列化、反序列化规则可以统一指定日期格式空值处理时区全局去掉 TConfiguration 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(GMT8)); 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 配置类全局所有✅ 支持✅ 支持企业项目、规范统一工具类手动格式化代码手动✅ 自己处理✅ 自己处理特殊定制格式