SpringBoot,SringMVC⽇期格式处理总结⽂章⽬录
⼀、⽇期格式化相关知识
1、JDK1.8之前
//⽇期转换成字符串
public static String dateToString(Date date, String patt){
SimpleDateFormat sdf =new SimpleDateFormat(patt);
String format = sdf.format(date);
return format;
}
//字符串转换成⽇期
public static Date string2Date(String str, String patt)throws ParseException {
SimpleDateFormat sdf =new SimpleDateFormat(patt);
Date parse = sdf.parse(str);
return parse;
}
2、JDK1.8
新的时间API
2.1、DateTimeFormatter
@Test
public void test(){
//⽅式⼀:预定义的标准格式。如:ISO_LOCAL_DATE_TIME;ISO_LOCAL_DATE;ISO_LOCAL_TIME
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");//⾃定义格式
DateTimeFormatter formatter1 = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
//格式化:⽇期-->字符串
LocalDateTime localDateTime = w();
String str1 = formatter.format(localDateTime);
System.out.println(localDateTime);
System.out.println(str1);//2019-02-18T15:42:18.797 //2021-06-21 22:01:07
}
//解析:字符串 -->⽇期
TemporalAccessor parse = formatter.parse("2021-06-21 22:01:07");
System.out.println(parse);
优化写法
@Test
public void test1(){
//⽅式⼀:预定义的标准格式。如:ISO_LOCAL_DATE_TIME;ISO_LOCAL_DATE;ISO_LOCAL_TIME
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");//⾃定义格式 DateTimeFormatter formatter1 = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
//格式化:⽇期-->字符串
//格式1: 2021-06-21 22:13:54
LocalDateTime localDateTime = w();
String str1 = localDateTime.format(formatter);
System.out.println(str1);//2021-06-21 22:13:54
//格式2: 2021年6⽉21⽇下午10时13分54秒
String format = localDateTime.format(DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG)); System.out.println(format);//2021年6⽉21⽇下午10时13分54秒
//解析:字符串 -->⽇期
LocalDateTime dateTime = LocalDateTime.parse(str1,formatter);
System.out.println(dateTime);//2021-06-21T22:10:10
}
其他格式化类型
@Test
public void test3(){
//⽅式⼀:预定义的标准格式。如:ISO_LOCAL_DATE_TIME;ISO_LOCAL_DATE;ISO_LOCAL_TIME
DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
//格式化:⽇期-->字符串
LocalDateTime localDateTime = w();
String str1 = formatter.format(localDateTime);
System.out.println(localDateTime);
System.out.println(str1);//2019-02-18T15:42:18.797
//解析:字符串 -->⽇期
TemporalAccessor parse = formatter.parse("2019-02-18T15:42:18.797");
System.out.println(parse);
//⽅式⼆:
//本地化相关的格式。如:ofLocalizedDateTime()
/
/FormatStyle.LONG / FormatStyle.MEDIUM / FormatStyle.SHORT :适⽤于LocalDateTime
DateTimeFormatter formatter1 = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG);
//格式化
String str2 = formatter1.format(localDateTime);
System.out.println(str2);//2019年2⽉18⽇下午03时47分16秒
// 本地化相关的格式。如:ofLocalizedDate()
// FormatStyle.FULL / FormatStyle.LONG / FormatStyle.MEDIUM / FormatStyle.SHORT : 适⽤于LocalDate
DateTimeFormatter formatter2 = DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM);
//格式化
String str3 = formatter2.w());
System.out.println(str3);//2019-2-18
// 重点:⽅式三:⾃定义的格式。如:ofPattern(“yyyy-MM-dd hh:mm:ss”)
DateTimeFormatter formatter3 = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");
//格式化
String str4 = formatter3.w());
System.out.println(str4);//2019-02-18 03:52:09
//解析
TemporalAccessor accessor = formatter3.parse("2019-02-18 03:52:09");
System.out.println(accessor);
}
⼆、⾃定义类型转换器
1、Spring MVC ⾃定义类型转换器
1. 表单提交的任何数据类型全部都是字符串类型,但是后台定义Integer类型,数据也可以封装上,说明
Spring框架内部会默认进⾏数据类型转换。
2. 如果想⾃定义数据类型转换,可以实现Converter的接⼝
3. ⾃定义类型转换器
package cn.itcast.utils;
DateFormat;SimpleDateFormat;import java.util.Date;
import verter.Converter;
/**
*把字符串转换成⽇期的转换器
*@author rt
*/
public class StringToDateConverter implements Converter<String, Date>{
/**
* 进⾏类型转换的⽅法
*/string转date的方法
public Date convert(String source){
// 判断
if(source == null){
throw new RuntimeException("参数不能为空");
}
try{
DateFormat df =new SimpleDateFormat("yyyy-MM-dd");
/
/ 解析字符串
Date date = df.parse(source);return date;
}catch(Exception e){
throw new RuntimeException("类型转换错误");
}
}
}
2、SpringBoot⾃定义类型转换器
<版本代码
2.1 String类型转换为Date类型
继承Spring提供的verter.Converter对象,重写其中的convert()⽅法 其中是⾃⼰的转换逻辑。
/**
* 将String 转换为Date集合
*/
public class StringToDateConverter implements Converter<String, Date>{
@Nullable
@Override
public Date convert(String json){
SimpleDateFormat simpleDateFormat =new SimpleDateFormat("yyyy-MM-dd");
try{
return simpleDateFormat.parse(json);
}catch(ParseException e){
e.printStackTrace();
}
return null;
}
}
2.2 String类型转换为List集合类型
与2.1转换Date类型相似 这⾥使⽤了jackson框架进⾏转换
/**
* 将String 转换为list集合
*/
public class StringToListConverter implements Converter<String, List<OrderDetail>>{
@Override
public List<OrderDetail>convert(String json){
List<OrderDetail> priceDetails = JsonUtil.str2List(json,OrderDetail.class);
return priceDetails;
}
}
2.3 转换类完成后,还需要将其交由Spring的容器进⾏处理,这⾥提供了两种⽅式1、继承WebMvcConfigurationSupport类并将该对象创建进⾏添加
@Configuration
public class ApplicationConfig extends WebMvcConfigurationSupport {
/**
* 添加静态资源⽂件
* @param registry
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry){
registry.addResourceHandler("/static/img").addResourceLocations("/img/");
registry.addResourceHandler("/static/css").addResourceLocations("/css/");
registry.addResourceHandler("/static/js").addResourceLocations("/js/");
registry.addResourceHandler("/static/swf").addResourceLocations("/swf/");
registry.addResourceHandler("/static/media").addResourceLocations("/media/");
}
/**
* 添加⾃定义的Converters和Formatters.
*/
@Override
protected void addFormatters(FormatterRegistry registry){
//添加字符串转换list的⾃定义转换器
registry.addConverter(new StringToListConverter());
//添加字符串转换Date的⾃定义转换器
registry.addConverter(new StringToDateConverter());
}
}
使⽤该⽅式会破坏SpringBoot默认加载静态⽂件的默认配置,需要重新进⾏添加,切记
2、第⼆种⽅式
@Configuration
public class SpringDataConvert {
@Autowired
private RequestMappingHandlerAdapter requestMappingHandlerAdapter;
/**
* 增加字符串转换为List集合
*/
@PostConstruct
public void addConversionConfig(){
ConfigurableWebBindingInitializer initializer =(ConfigurableWebBindingInitializer) WebBindingInitializer();
ConversionService()!= null){
GenericConversionService genericConversionService =(ConversionService();
//添加字符串转换为list集合的转换机器
genericConversionService.addConverter(new StringToListConverter());
//添加字符串转换为⽇期类型的字符串
genericConversionService.addConverter(new StringToDateConverter());
}
}
}
三、注解⽅式
@JsonFormat与@DateTimeFormat注解的使⽤
背景:从数据库获取时间传到前端进⾏展⽰的时候,我们有时候可能⽆法得到⼀个满意的时间格式的时间⽇期,在数据库中显⽰的是正确的时间格式,获取出来却变成了很丑的时间戳,@JsonFormat注解很好的解决了这个问题,我们通过使⽤@JsonFormat可以很好的解决:后台到前台时间格式保持⼀致的问题,其次,另⼀个问题是,我们在使⽤WEB服务的时,可能会需要⽤到,传⼊时间给后台,⽐如注册新⽤户需要填⼊出⽣⽇期等,这个时候前台传递给后台的时间格式同样是不⼀致的,⽽我们的与之对应的便有了另⼀个注
解,@DataTimeFormat便很好的解决了这个问题,接下来记录⼀下具体的@JsonFormat与DateTimeFormat的使⽤过程。
声明:关于@JsonFormat的使⽤,⼀定要导⼊正确完整的包。
1.注解@JsonFormat
注解@JsonFormat主要是后台到前台的时间格式的转换
1.使⽤maven引⼊@JsonFormat所需要的jar包,我贴⼀下我这⾥的pom⽂件的依赖
<!--JsonFormat-->
<dependency>
<groupId>com.</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.8.8</version>
</dependency>
<dependency>
<groupId>com.</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.8</version>
</dependency>
<dependency>
<groupId&dehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论