千家信息网

Springboot怎样进行全局日期格式化

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章给大家介绍Springboot怎样进行全局日期格式化,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。最近部门几位同事受了一些委屈相继离职,共事三年临别之际颇有不舍,待一切手
千家信息网最后更新 2026年11月01日Springboot怎样进行全局日期格式化

这篇文章给大家介绍Springboot怎样进行全局日期格式化,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

最近部门几位同事受了一些委屈相继离职,共事三年临别之际颇有不舍,待一切手续办妥帖,寒暄过后送他们出公司,几个老哥临别时冲我鬼魅一笑,我顿时心里一紧有种不好的预感,这事绝对没有这么简单。等我接手这几个大佬的项目后,应验了我的预感,此刻我居然有点后悔,为啥送别之时没揍他们一顿!哈哈哈~ 而这种打人的冲动,在我开始优化几位老哥的项目时候,变得越来越强烈。

有个坑

技术部每个月都会组织一下代码走查及优化,以前是各自审查优化自己的项目,如今几位老哥的离职他们的项目就落到了我的头上。对于程序员来说最痛苦的事情就是接手别人的项目,还要做优化改造,因为这一点也不比重构一遍项目简单。不过,军令在前,没办法硬着头皮上吧!

第一个优化的点就让我有点崩溃,这几个大佬的技能能力很强,一直都是我学习的榜样,但在项目里几乎所有的日期格式化都这样用 SimpleDateFormat ,像如下代码这样实现,emm~ ,受过伤的男人怎么啥事都做的出来,哈哈哈~

SvcOrderDailyStatisticsPo orderDailyStatisticsPo = new SvcOrderDailyStatisticsPo();SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");Date stationTime = dateFormat.parse(dateFormat.format(svcWorkOrderPo.getPayEndTime()));orderDailyStatisticsPo.setStatisticalDate(stationTime);

而且项目中的时间和日期API用的也比较混乱,考虑到 java.util.Date 和 java.util.Calendar 不支持时区,且非线程安全,对于日期的计算相对繁琐,技术部一致要求用JDK1.8以后的 java.time LocalDateTime。但不少人还是在用 java.util.Date 和 java.util.Calendar 处理日期。

优化方案

时间格式化是使用频率非常高的,如何让时间格式化变得既简单又不用重复造轮子,那么就应将它抽象出来,作为全局的日期格式化处理,下面就结合实践简单介绍下几种优化方案。

测试地址:http://127.0.0.1:8080/timeTest

@GetMapping("/timeTest")    public OrderInfo timeTest() {        OrderInfo order = new OrderInfo();        order.setCreateTime(LocalDateTime.now());        order.setUpdateTime(new Date());        return order;    }
1、@JsonFormat注解

使用@JsonFormat注解格式化时间,应该算是一个基本操作了,大部分开发者都应用此种方式,简单方便。

/** * @Author: xiaofu * @Description: */public class OrderInfo {    @JsonFormat(locale = "zh", timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")    private LocalDateTime createTime;    @JsonFormat(locale = "zh", timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")    private Date updateTime;    public LocalDateTime getCreateTime() {        return createTime;    }    public void setCreateTime(LocalDateTime createTime) {        this.createTime = createTime;    }    public Date getUpdateTime() {        return updateTime;    }    public void setUpdateTime(Date updateTime) {        this.updateTime = updateTime;    }}

测试一下结果,发现 Date 类型和 LocalDateTime 类型都格式化成功,但还是有个问题,这样做仍然比较繁琐,每个实体类的日期字段都要加@JsonFormat注解,重复的工作量也不小。接着往下看~

2、全局配置 (1)

Springboot 已经为我们提供了日期格式化 ${spring.jackson.date-format:yyyy-MM-dd HH:mm:ss},这里我们需要进行全局配置,配置比较简单,也无需在实体类属性上添加@JsonFormat注解。

/** * @Author: xiaofu * @Description: */public class OrderInfo {    //@JsonFormat(locale = "zh", timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")    private LocalDateTime createTime;    //@JsonFormat(locale = "zh", timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")    private Date updateTime;    public LocalDateTime getCreateTime() {        return createTime;    }    public void setCreateTime(LocalDateTime createTime) {        this.createTime = createTime;    }    public Date getUpdateTime() {        return updateTime;    }    public void setUpdateTime(Date updateTime) {        this.updateTime = updateTime;    }}

只需要用@Configuration定义一个配置类,注入两个Bean即可完成全局日期格式化处理,这种方式也是当前我项目中正在用的方式。

/** * @Author: xiaofu * @Description: */@Configurationpublic class LocalDateTimeSerializerConfig {    @Value("${spring.jackson.date-format:yyyy-MM-dd HH:mm:ss}")    private String pattern;    @Bean    public LocalDateTimeSerializer localDateTimeDeserializer() {        return new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(pattern));    }    @Bean    public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {        return builder -> builder.serializerByType(LocalDateTime.class, localDateTimeDeserializer());    }}

这种方式可支持 Date 类型和 LocalDateTime 类型并存,那么有一个问题就是现在全局时间格式是yyyy-MM-dd HH:mm:ss,但有的字段却需要yyyy-MM-dd格式咋整?

那就需要配合@JsonFormat注解使用,在特定的字段属性添加@JsonFormat注解即可,因为@JsonFormat注解优先级比较高,会以@JsonFormat注解标注的时间格式为主。

3、全局配置 (2)

这种全局配置的实现方式与上边的效果是一样的,不过,要注意的是使用这种配置后,字段手动配置@JsonFormat注解将不再生效。

/** * @Author: xiaofu * @Description: */public class OrderInfo {    //@JsonFormat(locale = "zh", timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")    private LocalDateTime createTime;    //@JsonFormat(locale = "zh", timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")    private Date updateTime;    public LocalDateTime getCreateTime() {        return createTime;    }    public void setCreateTime(LocalDateTime createTime) {        this.createTime = createTime;    }    public Date getUpdateTime() {        return updateTime;    }    public void setUpdateTime(Date updateTime) {        this.updateTime = updateTime;    }}
/** * @Author: xiaofu * @Description: */@Configurationpublic class LocalDateTimeSerializerConfig {    @Value("${spring.jackson.date-format:yyyy-MM-dd HH:mm:ss}")    private String pattern;    @Bean    @Primary    public ObjectMapper serializingObjectMapper() {        ObjectMapper objectMapper = new ObjectMapper();        JavaTimeModule javaTimeModule = new JavaTimeModule();        javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer());        javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer());        objectMapper.registerModule(javaTimeModule);        return objectMapper;    }    public class LocalDateTimeSerializer extends JsonSerializer {        @Override        public void serialize(LocalDateTime value, JsonGenerator gen, SerializerProvider serializers) throws IOException {            gen.writeString(value.format(ofPattern(pattern)));        }    }    public class LocalDateTimeDeserializer extends JsonDeserializer {        @Override        public LocalDateTime deserialize(JsonParser p, DeserializationContext deserializationContext) throws IOException {            return LocalDateTime.parse(p.getValueAsString(), ofPattern(pattern));        }    }}

关于Springboot怎样进行全局日期格式化就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

格式 日期 全局 注解 项目 配置 时间 方式 字段 类型 老哥 处理 繁琐 代码 内容 实体 就是 属性 技术 方案 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网新科技 互联网未来科技 云电互联网科技 郑州华宇互联网科技 长亮科技互联网金融 丰台科技园 互联网公司 中国最先进互联网科技公司 上海电发互联网科技有限公司 深圳前海聚择互联网科技有限公司 崇明区互联网教育科技售后服务 洛阳昕诺飞互联网科技有限公司 米聚互联网科技南京有限公司排面 电子科技大学互联网创业大赛 乌鲁木齐新华智原互联网科技学校 富国互联网科技002692 宁波跨境商互联网科技有限公司 济南小医互联网科技有限公司招聘 互联网科技接地气 广西泛欧互联网科技有限公司 互联网企业和网络科技有限公司 小米移动互联网科技园 智能科技公司是互联网公司吗 碳银互联网科技 奇酷互联网络科技公司 互联网科技英文翻译 华脉科技工业互联网产品 新华互联网科技2019 金融科技与互联网金融相同和不同 互联网企业科技类企业如何做账 科技美学互联网 艺术
0