详解Java关于时间格式化的⽅法
⼀般从数据库获取的时间或⽇期时间格式化为date或者datetime,为了⽅便前端渲染,API接⼝返回的时候需要对⽇期进⾏格式化转换,通常会⽤到SimpleDateFormat⼯具处理。
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
String time = dateFormat.format(new Date());
如果⼀个DTO类⾥⾯有很多关于时间字段需要格式化,就会降低开发效率,产⽣很多重复臃肿的代码。并且有的项⽬⽤Date,有的项⽬会⽤LocalDateTime
⽽此时如果能将时间格式统⼀配置,就可以省下更多时间专注于业务开发了。
接下来介绍SpringBoot中常⽤的对时间或⽇期处理的⽅式
⼀、@JsonFormat 注解
JsonFormat注解是jackson包⾥⾯的⼀个注解,需要加上依赖
<!-- mvnrepository/artifact/com./jackson-core -->
<dependency>
<groupId>com.</groupId>
<artifactId>jackson-core</artifactId>
<version>2.11.2</version>
</dependency>
@JsonFormat注解需要⽤在实体类的时间字段上,对应的字段才能进⾏格式化。
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.Date;
@Data
public class TestDTO {java时间日期格式转换
@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;
}
public TestDTO get(){
TestDTO testDTO = new TestDTO();
testDTO.w());
testDTO.setDate(new Date());
return testDTO;
}
如下所⽰
还有⼀种可以全局定义的
⼆、@JsonComponent 注解(全局)
配置类
@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("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()); }
}
这样我们就不⽤加注解了,也可以实现格式化
@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("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 时间格式化内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论