热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

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:目标类型,将会转成什么数据类型
@Component
public class GlobalFormDateConvert implements Converter {

 //静态初始化定义日期字符串参数列表(需要转换的)
 private static final List paramList = new ArrayList<>();

 //静态初始化可能初夏你的日期格式
 private static final String param1 = "yyyy-MM";
 private static final String param2 = "yyyy-MM-dd";
 private static final String param3 = "yyyy-MM-dd HH:mm";
 private static final 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 = new SimpleDateFormat(format);
   date = dateFormat.parse(source);
  } catch (Exception e) {
   e.printStackTrace();
  }
  return date;
 }


 //convert转换方法 ,s是将会传递过来的日期的字符串
 @Override
 public Date convert(String source) {

  System.out.println("convert日期格式转换器");
  if(StringUtils.isEmpty(source)){
   return null;
  }
  source = source.trim(); //去除首尾空格
  DateFormat dateFormat = new SimpleDateFormat(param1);

  //正则表达式判断是哪一种格式参数
  if (source.matches("^\\d{4}-\\d{1,2}$")) {
   return parseDate(source, paramList.get(0));
  } else if (source.matches("^\\d{4}-\\d{1,2}-\\d{1,2}$")) {
   return parseDate(source, paramList.get(1));
  } else if (source.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}$")) {
   return parseDate(source, paramList.get(2));
  } else if (source.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}:\\d{1,2}$")) {
   return parseDate(source, paramList.get(3));
  } else {
   throw new IllegalArgumentException("还未定义该种字符串转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;

public class GlobalJsonDateConvert extends StdDateFormat {

 //静态初始化final,共享
 public static final GlobalJsonDateConvert instance = new GlobalJsonDateConvert();

 //覆盖parse(String)这个方法即可实现
 @Override
 public Date parse(String dateStr, ParsePosition pos) {
  return getDate(dateStr, pos);
 }

 @Override
 public Date parse(String dateStr) {
  ParsePosition pos = new ParsePosition(0);
  return getDate(dateStr, pos);
 }

 private Date getDate(String dateStr, ParsePosition pos) {
  System.out.println("json格式日期转换");
  SimpleDateFormat sdf = null;
  if (StringUtils.isEmpty(dateStr)) {
   return null;
  } else if (dateStr.matches("^\\d{4}-\\d{1,2}$")) {
   sdf = new SimpleDateFormat("yyyy-MM");
   return sdf.parse(dateStr, pos);
  } else if (dateStr.matches("^\\d{4}-\\d{1,2}-\\d{1,2}$")) {
   sdf = new SimpleDateFormat("yyyy-MM-dd");
   return sdf.parse(dateStr, pos);
  } else if (dateStr.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}$")) {
   sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
   return sdf.parse(dateStr, pos);
  } else if (dateStr.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}:\\d{1,2}$")) {
   sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
   return sdf.parse(dateStr, pos);
  } else if (dateStr.length() == 23) {
   sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
   return sdf.parse(dateStr, pos);
  }
  return super.parse(dateStr, pos);
 }

 @Override
 public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition fieldPosition){
  SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  return sdf.format(date, toAppendTo, fieldPosition);
 }

 @Override
 public GlobalJsonDateConvert clone() {
  return new GlobalJsonDateConvert();
 }
}

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;


@Configuration
public class WebConfig {

 //JSON格式 全局日期转换器配置
 @Bean
 public MappingJackson2HttpMessageConverter getMappingJackson2HttpMessageConverter() {
  MappingJackson2HttpMessageConverter mappingJackson2HttpMessageCOnverter= new MappingJackson2HttpMessageConverter();
  //设置日期格式
  ObjectMapper objectMapper = new ObjectMapper();
  objectMapper.setDateFormat(GlobalJsonDateConvert.instance);
  objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
  mappingJackson2HttpMessageConverter.setObjectMapper(objectMapper);
  //设置中文编码格式
  List list = new ArrayList();
  list.add(MediaType.APPLICATION_JSON_UTF8);
  mappingJackson2HttpMessageConverter.setSupportedMediaTypes(list);
  return mappingJackson2HttpMessageConverter;
 }

 //表单格式 全局日期转换器

 @Bean
 @Autowired
 public ConversionService getConversionService(GlobalFormDateConvert globalDateConvert){
  ConversionServiceFactoryBean factoryBean = new ConversionServiceFactoryBean();
  Set cOnverters= new HashSet<>();
  converters.add(globalDateConvert);
  factoryBean.setConverters(converters);
  return factoryBean.getObject();
 }
}

到此这篇关于SpringBoot日期格式转换之配置全局日期格式转换器的实例详解的文章就介绍到这了,更多相关SpringBoot日期格式转换内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!


推荐阅读
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文讲述了如何通过代码在Android中更改Recycler视图项的背景颜色。通过在onBindViewHolder方法中设置条件判断,可以实现根据条件改变背景颜色的效果。同时,还介绍了如何修改底部边框颜色以及提供了RecyclerView Fragment layout.xml和项目布局文件的示例代码。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 本文讨论了在Spring 3.1中,数据源未能自动连接到@Configuration类的错误原因,并提供了解决方法。作者发现了错误的原因,并在代码中手动定义了PersistenceAnnotationBeanPostProcessor。作者删除了该定义后,问题得到解决。此外,作者还指出了默认的PersistenceAnnotationBeanPostProcessor的注册方式,并提供了自定义该bean定义的方法。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • 本文介绍了在使用MSXML解析XML文件时出现DTD禁用问题的解决方案。通过代码示例和错误信息获取方法,解释了默认情况下DTD是禁用的,以及如何启用DTD的方法。此外,还提到了网上关于该问题的信息相对较少,因此本文提供了解决方案以供参考。 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
author-avatar
腾云溪牛_556
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有