Spring项目Date类型处理

一、MySQL的五种日期和时间类型

  MySQL中有多种表示日期和时间的数据类型。其中YEAR表示年份,DATE表示日期,TIME表示时间,``DATETIMETIMESTAMP`表示日期和时间。它们的对比如下:

名称 字节数 取值范围
YEAR 1 1901——2155
DATE 4 1000-01-01——9999-12-31
TIME 3 -838:59:59——838:59:59
DATETIME 8 1000-01-01 00:00:00——9999-12-31 23:59:59
TIMESTAMP 4 19700101080001——20380119111407

二、@JsonFormat时间格式化注解使用

Maven依赖:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.2</version>
</dependency>

spring-boot-stater-web中已经封装了该包,可直接使用。

  1. 全局处理时间格式化

application.properties中时间格式化修改为如下:

spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8

   设置过后,配置文件设置后实体类中的所有Date类型会以yyyy-MM-dd HH:mm:ss形式接收参数,由于与表中的其他Date字段要求不一致,在不一致的date类型属性上加@JsonFormat注解用以覆盖application.properties中的时间格式设置。

  1. 特殊处理时间格式化
//项目要求`time(HH:mm)`
    @JsonFormat(pattern = "HH:mm",timezone="GMT+8")
    private Date startTime;

//项目要求`date(yyyy-MM-dd)`
    @JsonFormat(pattern = "yyyy-MM-dd",timezone="GMT+8")
    private Date completionDate;

//项目要求`datetime(yyyy-MM-dd HH:mm)`
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm",timezone="GMT+8")
    private Date realWorkEndTime;

二、时间问题处理演示

以DailyWorkContent实体类为例,作为演示。

TIM图片20200528121851.png

swagger中发起存入请求。

TIM图片20200528121851.png

swagger中查询刚刚插入的信息

1590639772608.png