0


SpringBoot日期格式转换,SpringBoot配置全局日期格式转换器

文章目录

1. SpringBoot设置后台向前台传递Date日期格式

在springboot应用中,

@RestController

注解的json默认序列化中,日期格式默认为:

2020-12-03T15:12:26.000+00:00

类型的显示。
在这里插入图片描述
在实际显示中,我们需要对其转换成我们需要的显示格式。

1.1 方式1:配置文件修改

配置文件配置

application.yml

spring:# 配置日期格式化jackson:date-format: yyyy-MM-dd HH:mm:ss  #时间戳统一转换为指定格式time-zone: GMT+8  # 时区修改为东8区
application.properties

配置方式

spring.jackson.date-format=yyyy-MM-dd HH:mm:ss    #时间戳统一转换为指定格式
spring.jackson.time-zone=GMT+8    # 时区修改为东8区

【注意】这里需要修改时区

time-zone

:数据库默认时区是格林尼治的时间,如果不设置,会比实际时间少8个小时(北京时间)。

1.2 方式2:在javabean实体类上加注解

I.

@JsonFormat

注解

@JsonFormat

注解用于属性或方法上,将

Date

类型转换为我们需要的类型显示。

//在pattern上设置自己需要的格式@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")private Date createTime;

II.

@DateTimeFormat

注解

在需要进行日期格式转换的Date属性上添加注解

@DateTimeFormat(pattern = "需要转换的格式")
//注解将yyyy-MM-dd的形式转换为Date数据@DateTimeFormat(pattern ="yyyy-MM-dd HH:mm:ss")private Date birthday;

III.

@Temporal

注解

通过

@Temporal

注解,实现日期格式转换,它自带属性参数,比如:

@Temporal注解参数作用TemporalType.DATE

@Temporal(TemporalType.DATE)

,会得到

yyyy-MM-dd

格式的日期形式。TemporalType.TIME

@Temporal(TemporalType.TIME)

,会得到

HH:MM:SS

格式的时间形式。TemporalType.TIMESTAMP

@Temporal(TemporalType.TIMESTAMP)

,会得到

yyyy-MM-dd hh:MM:ss

格式的日期时间形式。

@Temporal(TemporalType.TIMESTAMP)private Date createTime;

2. SpringBoot配置全局日期格式转换器

配置从页面接收的String和json格式的日期转换为Date类型。

2.1 配置String类型表单传参转Date的转换器

import org.springframework.core.convert.converter.Converter;import org.springframework.stereotype.Component;import org.springframework.util.StringUtils;import java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;import java.util.List;//Converter<S,T>  S: 代表的是源,将要转换的数据类型  T:目标类型,将会转成什么数据类型@ComponentpublicclassGlobalFormDateConvertimplementsConverter<String, Date>{//静态初始化定义日期字符串参数列表(需要转换的)privatestaticfinal List<String> paramList =newArrayList<>();//静态初始化可能初夏你的日期格式privatestaticfinal String param1 ="yyyy-MM";privatestaticfinal String param2 ="yyyy-MM-dd";privatestaticfinal String param3 ="yyyy-MM-dd HH:mm";privatestaticfinal String param4 ="yyyy-MM-dd HH:mm:ss";//静态代码块,将日期参数加入到列表中static{
        paramList.add(param1);
        paramList.add(param2);
        paramList.add(param3);
        paramList.add(param4);}//自定义函数,将字符串转Date  参1:传入的日期字符串  参2:格式参数public Date parseDate(String source, String format){
        System.out.println("parseDate转换日期");
        Date date = null;try{//日期格式转换器
            DateFormat dateFormat =newSimpleDateFormat(format);
            date = dateFormat.parse(source);}catch(Exception e){
            e.printStackTrace();}return date;}//convert转换方法 ,s是将会传递过来的日期的字符串@Overridepublic Date convert(String source){

        System.out.println("convert日期格式转换器");if(StringUtils.isEmpty(source)){return null;}
        source = source.trim();//去除首尾空格
        DateFormat dateFormat =newSimpleDateFormat(param1);//正则表达式判断是哪一种格式参数if(source.matches("^\\d{4}-\\d{1,2}$")){returnparseDate(source, paramList.get(0));}elseif(source.matches("^\\d{4}-\\d{1,2}-\\d{1,2}$")){returnparseDate(source, paramList.get(1));}elseif(source.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}$")){returnparseDate(source, paramList.get(2));}elseif(source.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}:\\d{1,2}$")){returnparseDate(source, paramList.get(3));}else{thrownewIllegalArgumentException("还未定义该种字符串转Date的日期转换格式 --> 【日期格式】:"+ source);}}}

2.2 配置Json数据转Date的全局日期转换器

import java.text.FieldPosition;import java.text.ParsePosition;import java.text.SimpleDateFormat;import java.util.Date;import com.fasterxml.jackson.databind.util.StdDateFormat;import org.springframework.util.StringUtils;publicclassGlobalJsonDateConvertextendsStdDateFormat{//静态初始化final,共享publicstaticfinal GlobalJsonDateConvert instance =newGlobalJsonDateConvert();//覆盖parse(String)这个方法即可实现@Overridepublic Date parse(String dateStr, ParsePosition pos){returngetDate(dateStr, pos);}@Overridepublic Date parse(String dateStr){
        ParsePosition pos =newParsePosition(0);returngetDate(dateStr, pos);}private Date getDate(String dateStr, ParsePosition pos){
        System.out.println("json格式日期转换");
        SimpleDateFormat sdf = null;if(StringUtils.isEmpty(dateStr)){return null;}elseif(dateStr.matches("^\\d{4}-\\d{1,2}$")){
            sdf =newSimpleDateFormat("yyyy-MM");return sdf.parse(dateStr, pos);}elseif(dateStr.matches("^\\d{4}-\\d{1,2}-\\d{1,2}$")){
            sdf =newSimpleDateFormat("yyyy-MM-dd");return sdf.parse(dateStr, pos);}elseif(dateStr.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}$")){
            sdf =newSimpleDateFormat("yyyy-MM-dd HH:mm");return sdf.parse(dateStr, pos);}elseif(dateStr.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}:\\d{1,2}$")){
            sdf =newSimpleDateFormat("yyyy-MM-dd HH:mm:ss");return sdf.parse(dateStr, pos);}elseif(dateStr.length()==23){
            sdf =newSimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");return sdf.parse(dateStr, pos);}returnsuper.parse(dateStr, pos);}@Overridepublic StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition fieldPosition){
        SimpleDateFormat sdf =newSimpleDateFormat("yyyy-MM-dd HH:mm:ss");return sdf.format(date, toAppendTo, fieldPosition);}@Overridepublic GlobalJsonDateConvert clone(){returnnewGlobalJsonDateConvert();}}

2.3 配置bean交给Spring管理

import com.fasterxml.jackson.annotation.JsonInclude;import com.fasterxml.jackson.databind.ObjectMapper;import com.xgf.online_mall.convert.GlobalFormDateConvert;import com.xgf.online_mall.convert.GlobalJsonDateConvert;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.context.support.ConversionServiceFactoryBean;import org.springframework.core.convert.ConversionService;import org.springframework.core.convert.converter.Converter;import org.springframework.http.MediaType;import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;import java.util.ArrayList;import java.util.List;import java.util.HashSet;import java.util.Set;@ConfigurationpublicclassWebConfig{//JSON格式 全局日期转换器配置@Beanpublic MappingJackson2HttpMessageConverter getMappingJackson2HttpMessageConverter(){
        MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter =newMappingJackson2HttpMessageConverter();//设置日期格式
        ObjectMapper objectMapper =newObjectMapper();
        objectMapper.setDateFormat(GlobalJsonDateConvert.instance);
        objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
        mappingJackson2HttpMessageConverter.setObjectMapper(objectMapper);//设置中文编码格式
        List<MediaType> list =newArrayList<MediaType>();
        list.add(MediaType.APPLICATION_JSON_UTF8);
        mappingJackson2HttpMessageConverter.setSupportedMediaTypes(list);return mappingJackson2HttpMessageConverter;}//表单格式 全局日期转换器@Bean@Autowiredpublic ConversionService getConversionService(GlobalFormDateConvert globalDateConvert){
        ConversionServiceFactoryBean factoryBean =newConversionServiceFactoryBean();
        Set<Converter> converters =newHashSet<>();
        converters.add(globalDateConvert);
        factoryBean.setConverters(converters);return factoryBean.getObject();}}

参考;博客园【NcQiao】大佬的文章:https://www.cnblogs.com/joelan0927/p/11715062.html


本文转载自: https://blog.csdn.net/qq_40542534/article/details/110632544
版权归原作者 strive_day 所有, 如有侵权,请联系我们删除。

“SpringBoot日期格式转换,SpringBoot配置全局日期格式转换器”的评论:

还没有评论