首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >使用日期注解一个个格式化太麻烦?我来全局格式化一下

使用日期注解一个个格式化太麻烦?我来全局格式化一下

作者头像
Lvshen
发布2022-05-05 18:56:43
发布2022-05-05 18:56:43
6030
举报

为什么需要格式化日期

一般情况下,我们如果要将日期数据显示,就需要将日期格式化。例如下面的场景:

现在Student类中有一个Data类型是字段,如果我们没有做任何处理。在我们打印时就会有如下显示:

显示结果为:

代码语言:javascript
复制
Student{score=100, name='Lvshen', date=Mon Oct 19 09:06:19 CST 2020}

如果直接入库,那么数据库中的日期字段就会显示:

代码语言:javascript
复制
Mon Oct 19 09:06:19 CST 2020

格式化日期类Date

上面的日期格式并不是我们想要的,如果你使用的Spring工程可以使用@JsonFormat注解:

代码语言:javascript
复制
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date date;

然后直接调接口获取到数据:

代码语言:javascript
复制
{
    "score": 100,
    "name": "Lvshen",
    "date": "2020-10-19 09:52:24"
}

那么入库的日期字段显示就是:

代码语言:javascript
复制
2020-10-19 09:52:24

但是这样有一个问题,每创建一个实体类,每写一个日期类的字段,都需要添加@JsonFormat注解,太过麻烦。可不可以全局控制这个日期格式呢?

我们可以在application.yml文件里面加入:

代码语言:javascript
复制
spring:
    jackson:
        date-format: yyyy-MM-dd HH:mm:ss
        time-zone: GMT+8

就可以实现我们的需求了。

格式化日期类LocalDateTime

但是我们现在一般使用的Java8的LocalDateTime。至于为什么使用LocalDateTime而不是Date,有兴趣可以看看官方文档。

代码语言:javascript
复制
private LocalDateTime localDateTime;

我们发现上面的全局配置使用失效了。

代码语言:javascript
复制
{
    "score": 100,
    "name": "Lvshen",
    "date": "2020-10-19 10:35:40",
    "localDateTime": "2020-10-19T10:35:40.241"
}

这里我们就需要使用

代码语言:javascript
复制
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime localDateTime;

显示结果:

代码语言:javascript
复制
{
    "score": 100,
    "name": "Lvshen",
    "date": "2020-10-19 11:24:50",
    "localDateTime": "2020-10-19 11:24:50"
}

全局配置类格式化LocalDateTime

如果我们需要全局格式化,可以这么写。我们编写一个配置类LocalDateTimeSerializerConfig

代码语言:javascript
复制
@Configuration
public class LocalDateTimeSerializerConfig {
    @Value("${spring.jackson.date-format}")
    private String pattern;

    @Bean
    public LocalDateTimeSerializer localDateTimeDeserializer() {
        return new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(pattern));
    }

    @Bean
    public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
        return builder -> builder.serializerByType(LocalDateTime.class, localDateTimeDeserializer());
    }
}

这个类就是我们想要的格式化的配置代码,字段pattern就是格式化的样式规则。

代码语言:javascript
复制
{
    "score": 100,
    "name": "Lvshen",
    "date": "2020-10-19 11:32:31",
    "localDateTime": "2020-10-19 11:32:31"
}

好了,本篇在这里就结束了,谢谢支持😀。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-10-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Lvshen的技术小屋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 为什么需要格式化日期
  • 格式化日期类Date
  • 格式化日期类LocalDateTime
  • 全局配置类格式化LocalDateTime
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档