当前位置: 首页 > news >正文

日期格式化接收和格式化接收

SpringBoot 日期接收输出格式化全套 4 种方法(最全总结,记下来够用整个开发生涯)

分两大场景:

  1. 接收前端日期字符串 → 转 Java Date/LocalDateTime(入参)
  2. 后端 Java 日期对象 → 返给前端标准字符串(出参)

先统一说明

现在开发推荐用:JDK8 新时间类LocalDateLocalTimeLocalDateTime不再用老旧DateCalendar


一、方式 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;

区别:

  • @JsonFormatJSON 传参
  • @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 配置类全局所有✅ 支持✅ 支持企业项目、规范统一
工具类手动格式化代码手动✅ 自己处理✅ 自己处理特殊定制格式
http://www.jsqmd.com/news/780255/

相关文章:

  • 开源婴儿技能库:结构化育儿知识库的设计与实践
  • MCP协议赋能AI获取亚马逊趋势数据:构建自动化市场洞察工作流
  • 【汽车芯片功能安全分析与故障注入实践 03】从 Base FIT Rate 开始:为什么安全分析要先做 BFR?
  • 一个 C++ 程序从磁盘到内存要经历多少次变形?——从 ELF section 到 segment,拆解 execve 加载器的 6 步地址空间构建
  • 麻雀搜索算法(SSA)原理详解与Python实现
  • ARM编译器诊断风格与优化实战指南
  • 别再死记硬背了!用一张图+实战代码,带你吃透USB PD协议里的24种控制消息
  • OpenClaw智能体安全实践:ClawAegis纵深防御架构详解
  • 开源像素光标主题制作指南:从sheep-realms-avatar到全平台个性化方案
  • 【2026实测】论文AI率居高不下?3大高阶指令+4款工具快速通关指南
  • GPU浮点运算非确定性与Hawkeye解决方案
  • Arm Neoverse V2处理器勘误分类与规避方案详解
  • 量子块编码优化:稀疏矩阵与边界条件的高效处理
  • 有哪些降重软件能保住论文原意,不会改得逻辑不通?
  • Ruler:统一管理AI编程助手指令,提升团队协作与代码质量
  • de4dot:免费开源的.NET反混淆神器,轻松解密被保护的代码
  • Mongoose游标分页插件honey-pager实战:解决GraphQL API大数据分页难题
  • 从“石头剪刀布”到商业竞争:用Python实战模拟完全信息静态博弈(附代码)
  • 基于CodeMirror 6的React代码编辑器集成与深度定制指南
  • Java 8+ 时间类型 :从 LocalDateTime 到 Instant
  • InputTip:基于AutoHotkey的Windows输入法状态智能提示与自动切换工具
  • ARM VLD4指令解析:SIMD多寄存器加载技术
  • 三星全线退出中国家电市场:真被国货打跑?还是战略大转移?
  • 泰山派3M-RK3576-系统功能-Android14-mSATA硬盘使用
  • Clutch:构建统一运维平台的云原生网关框架实战指南
  • AI应用安全防护:基于OpenClaw-Skill-Guard的技能守卫系统设计与实战
  • 从零构建轻量级IM后端:Node.js+Socket.IO+MongoDB实战
  • 基于Vercel与Astro构建私有化AI对话与绘图平台实战指南
  • 智能合约安全分析新范式:基于谓词逻辑的形式化验证工具
  • 从iPhone备份提取Apple Watch健康数据的开源工具WatchClaw详解