文章目录
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
版权归原作者 strive_day 所有, 如有侵权,请联系我们删除。