详解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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。