详解Java关于时间格式化的方法
一般从数据库获取的时间或日期时间格式化为date或者datetime,为了方便前端渲染,API接口返回的时候需要对日期进行格式化转换,通常会用到 SimpleDateFormat 工具处理。
SimpleDateFormatdateFormat=newSimpleDateFormat("yyyy-MM-dd"); Stringtime=dateFormat.format(newDate());
如果一个DTO类里面有很多关于时间字段需要格式化,就会降低开发效率,产生很多重复臃肿的代码。并且有的项目用Date,有的项目会用LocalDateTime
而此时如果能将时间格式统一配置,就可以省下更多时间专注于业务开发了。
接下来介绍SpringBoot中常用的对时间或日期处理的方式
一、@JsonFormat注解
JsonFormat注解是jackson包里面的一个注解,需要加上依赖
com.fasterxml.jackson.core jackson-core 2.11.2
@JsonFormat注解需要用在实体类的时间字段上,对应的字段才能进行格式化。
importcom.fasterxml.jackson.annotation.JsonFormat; importlombok.Data; importjava.time.LocalDateTime; importjava.util.Date; @Data publicclassTestDTO{ @JsonFormat(locale="zh",timezone="GMT+8",pattern="yyyy-MM-dd") privateLocalDateTimecreateTime; @JsonFormat(locale="zh",timezone="GMT+8",pattern="yyyy-MM-ddHH:mm:ss") privateDateupdateTime; }
publicTestDTOget(){ TestDTOtestDTO=newTestDTO(); testDTO.setLocalDateTime(LocalDateTime.now()); testDTO.setDate(newDate()); returntestDTO; }
如下所示
还有一种可以全局定义的
二、@JsonComponent注解 (全局)
配置类
@JsonComponent publicclassDateFormatConfig{ @Value("${spring.jackson.date-format:yyyy-MM-ddHH:mm:ss}") privateStringpattern; //date类型全局时间格式化 @Bean publicJackson2ObjectMapperBuilderCustomizerjackson2ObjectMapperBuilder(){ returnbuilder->{ TimeZonetz=TimeZone.getTimeZone("UTC"); DateFormatdf=newSimpleDateFormat(pattern); df.setTimeZone(tz); builder.failOnEmptyBeans(false) .failOnUnknownProperties(false) .featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) .dateFormat(df); }; } //LocalDate类型全局时间格式化 @Bean publicLocalDateTimeSerializerlocalDateTimeDeserializer(){ returnnewLocalDateTimeSerializer(DateTimeFormatter.ofPattern(pattern)); } @Bean publicJackson2ObjectMapperBuilderCustomizerjackson2ObjectMapperBuilderCustomizer(){ returnbuilder->builder.serializerByType(LocalDateTime.class,localDateTimeDeserializer()); } }
这样我们就不用加注解了,也可以实现格式化
@JsonComponent publicclassDateFormatConfig{ @Value("${spring.jackson.date-format:yyyy-MM-ddHH:mm:ss}") privateStringpattern; //date类型全局时间格式化 @Bean publicJackson2ObjectMapperBuilderCustomizerjackson2ObjectMapperBuilder(){ returnbuilder->{ TimeZonetz=TimeZone.getTimeZone("UTC"); DateFormatdf=newSimpleDateFormat(pattern); df.setTimeZone(tz); builder.failOnEmptyBeans(false) .failOnUnknownProperties(false) .featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) .dateFormat(df); }; } //LocalDate类型全局时间格式化 @Bean publicLocalDateTimeSerializerlocalDateTimeDeserializer(){ returnnewLocalDateTimeSerializer(DateTimeFormatter.ofPattern(pattern)); } @Bean publicJackson2ObjectMapperBuilderCustomizerjackson2ObjectMapperBuilderCustomizer(){ returnbuilder->builder.serializerByType(LocalDateTime.class,localDateTimeDeserializer()); } }
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。