在java的日常开发中,我们经常需要去接收前端传递过来的时间字符串,同时给前端返回数据时,也会涉及到时间字段的数据传递,那么我们要如何处理这些字段呢?
知识铺垫:java最后返回的时间是时间世界(世界UTC时间和中国时间有八个小时的时差!)
在java中,我们将时间字符串转化成日期对象,方式主要有二种。
- 通过字符串接收前端传过来的时间字符串,然后使用java的日期类,按照特定的格式将其转化成日期类(一般使用简单日期格式化类处理)
- 通过注解的方式,直接将前端传来的时间字符串转化成日期类对象
方式一(现在不常用了):
public void test(String stime) { String pattern = "yyyy-MM-dd HH:mm:ss";SimpleDateFormat sdf = new SimpleDateFormat(pattern);Date startTime = null;try {startTime = sdf.parse(stime);} catch (ParseException e) {e.printStackTrace();} }
这种方式的话主要是先接收参数,在根据特定的规则将其转化为时间类
方式2:使用注解的方式,直接将前端传来的时间字符串转化成日期类对象
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")这个注解可以解决url传时间字符串的问题,只要前端传的是合法的字符串,就可以正确的转化,
但如果只使用这个注解,那么当后端返回直接参数时,返回的时间会被转化成时间世界(世界UTC时间和中国时间有八个小时的时差!)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")这个注解可以同时解决前端的时间传参和后端参数的返回,返回的时间不会乱,
但需要注意的是这个注解不是springboot自带的,而是fastjson这个依赖带的,所以要使用它,需要导入这个依赖
注意:@DateTimeFormat这个注解是java自带的注解,而@JsonFormat是fastjson这个依赖带的,所以要使用它,需要导入这个依赖
现在开发一般都会直接使用@JsonFormat这种方式,因为它既解决了前端的传参,又解决了服务端给前端返回时间字段的问题