相差8个小时
原因
spring中对于@RestController或者@Controller+@ResponseBody
注解的接口方法的返回值默认是Json格式,
所以当对于date类型的数据,在返回浏览器端是会被spring-boot
默认的Jackson框架转换,而Jackson框架默认的时区GMT(相对于中国是少了8小时)。
解决方案
1 如果你的项目是 spring-boot
在application.properties添加配置 配置spring的时区 这条语句能解决你时间多8个小时问题,若少8小时,则GMT+8,再跟上一条时间戳配置,这样前端接收的时间数据就是“yyyy-MM-dd HH:mm:ss”类型字符串了
spring:
jackson:
time-zone: GMT
date-format: yyyy-MM-dd HH:mm:ss
2 如果你的项目是 springMvc
这个主要是因为时区的问题,只要在Spring的配置文件中设置好时区就好了。代码如下:
<mvc:annotation-driven>
<!-- 处理请求时返回json字符串的中文乱码问题 -->
<mvc:message-converters register-defaults="true">
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<constructor-arg value="UTF-8" />
</bean>
<!--处理时区问题-->
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="objectMapper">
<bean class="com.fasterxml.jackson.databind.ObjectMapper">
<!-- 处理responseBody 里面日期类型 -->
<property name="dateFormat">
<bean class="java.text.SimpleDateFormat">
<constructor-arg type="java.lang.String" value="yyyy-MM-dd HH:mm:ss" />
</bean>
</property>
<!-- 时区指定 -->
<property name="timeZone" value="GMT+8" />
<!-- 为null字段时不显示 -->
<property name="serializationInclusion">
<value type="com.fasterxml.jackson.annotation.JsonInclude.Include">NON_NULL</value>
</property>
</bean>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
3.若数据不是输出到前端,可以查看具体代码中哪个地方,日期数据发生改变,在对应的位置加上一下代码也ok。
Date date = lateCheckInfo.getLastImportTime(); //修改之后的日期数据
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.HOUR_OF_DAY, -8); //根据自己需要操作
date = cal.getTime();
转载于原文地址
若还无法解决请查看原文。