一般從數據庫獲取的時間或日期時間格式化為date或者datetime,為了方便前端渲染,API接口返回的時候需要對日期進行格式化轉換,通常會用到 SimpleDateFormat
工具處理。
1
2
|
SimpleDateFormat dateFormat = new SimpleDateFormat( "yyyy-MM-dd" ); String time = dateFormat.format( new Date()); |
如果一個DTO類里面有很多關于時間字段需要格式化,就會降低開發效率,產生很多重復臃腫的代碼。并且有的項目用Date,有的項目會用LocalDateTime
而此時如果能將時間格式統一配置,就可以省下更多時間專注于業務開發了。
接下來介紹SpringBoot中常用的對時間或日期處理的方式
一、@JsonFormat 注解
JsonFormat注解是jackson包里面的一個注解,需要加上依賴
1
2
3
4
5
6
|
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core --> < dependency > < groupId >com.fasterxml.jackson.core</ groupId > < artifactId >jackson-core</ artifactId > < version >2.11.2</ version > </ dependency > |
@JsonFormat注解需要用在實體類的時間字段上,對應的字段才能進行格式化。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import java.time.LocalDateTime; import java.util.Date; @Data public class TestDTO { @JsonFormat (locale = "zh" , timezone = "GMT+8" , pattern = "yyyy-MM-dd" ) private LocalDateTime createTime; @JsonFormat (locale = "zh" , timezone = "GMT+8" , pattern = "yyyy-MM-dd HH:mm:ss" ) private Date updateTime; } |
1
2
3
4
5
6
|
public TestDTO get(){ TestDTO testDTO = new TestDTO(); testDTO.setLocalDateTime(LocalDateTime.now()); testDTO.setDate( new Date()); return testDTO; } |
如下所示
還有一種可以全局定義的
二、@JsonComponent 注解 (全局)
配置類
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
|
@JsonComponent public class DateFormatConfig { @Value ( "${spring.jackson.date-format:yyyy-MM-dd HH:mm:ss}" ) private String pattern; // date 類型全局時間格式化 @Bean public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilder() { return builder -> { TimeZone tz = TimeZone.getTimeZone( "UTC" ); DateFormat df = new SimpleDateFormat(pattern); df.setTimeZone(tz); builder.failOnEmptyBeans( false ) .failOnUnknownProperties( false ) .featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) .dateFormat(df); }; } // LocalDate 類型全局時間格式化 @Bean public LocalDateTimeSerializer localDateTimeDeserializer() { return new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(pattern)); } @Bean public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() { return builder -> builder.serializerByType(LocalDateTime. class , localDateTimeDeserializer()); } } |
這樣我們就不用加注解了,也可以實現格式化
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
|
@JsonComponent public class DateFormatConfig { @Value ( "${spring.jackson.date-format:yyyy-MM-dd HH:mm:ss}" ) private String pattern; // date 類型全局時間格式化 @Bean public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilder() { return builder -> { TimeZone tz = TimeZone.getTimeZone( "UTC" ); DateFormat df = new SimpleDateFormat(pattern); df.setTimeZone(tz); builder.failOnEmptyBeans( false ) .failOnUnknownProperties( false ) .featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) .dateFormat(df); }; } // LocalDate 類型全局時間格式化 @Bean public LocalDateTimeSerializer localDateTimeDeserializer() { return new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(pattern)); } @Bean public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() { return builder -> builder.serializerByType(LocalDateTime. class , localDateTimeDeserializer()); } } |
到此這篇關于詳解Java關于時間格式化的方法的文章就介紹到這了,更多相關Java 時間格式化內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://blog.csdn.net/qq_41937388/article/details/108412315