SpringBoot三种方法接口返回日期格式化

### 方法一:@[JsonFormat注解](https://so.csdn.net/so/search?q=JsonFormat%E6%B3%A8%E8%A7%A3&spm=1001.2101.3001.7020)

在返回实体的字段上添加@JsonFormat注解。

1
2
3
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createDate;

pattern是日期格式,timezone是时间分区。格式具体可以参考下图:
在这里插入图片描述

方法二:JsonConfig配置

全局配置。好处:无需每个类配置日期格式坏处:不灵活,只能统一。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package com.xy.config;

import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
import org.springframework.boot.jackson.JsonComponent;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.TimeZone;

//jackson日期
@Slf4j
@JsonComponent

public class JacksonConfig {

@Value("${my.jackson.date-format:yyyy-MM-dd HH:mm:ss}")
private String pattern;

@Bean
public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilder() {

return builder -> {
TimeZone tz = TimeZone.getTimeZone("GMT+8");
DateFormat df = new SimpleDateFormat(pattern);
df.setTimeZone(tz);
builder.failOnEmptyBeans(false)
.failOnUnknownProperties(false)
.featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
.dateFormat(df);
};
}

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

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

}

然后配置文件里配置好格式就行。

方法三:yml配置

1
2
3
4
spring:
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8

UTC和 GMT区别UTC‌:协调世界时间(UTC)是基于原子时钟的时间计量系统,旨在尽量接近世界时(UT)。UTC的时间尺度是均匀的,不考虑地球自转速度的变化‌。‌GMT+8‌:格林威治平均时间加8小时,即东八区的本地时间。GMT+8通常用于表示中国北京时间‌‌UTC‌:在国际无线电通信、卫星导航等需要高精度时间计量的场合广泛使用‌。‌GMT+8‌:常用于表示中国北京时间,在电子邮件信头、软件显示时间等场合使用‌。总结:UTC和GMT+8基本相同,UTC更精确而GMT+8常代表北京时间。

总结

三种方法个人推荐第三种。为什么,因为太方便了,另外如果有特殊格式,可以再加@JsonFormat单独注解,会优先以添加了@JsonFormat注解的为准。