情况1、java使用new date()获取的时间会和真实的本地时间相差8小时
原因:new date() 调用的是jvm时间,而jvm使用的时间默认是0时区的时间,即:和北京时间将会相差8小时
解决方法:启动main类上加上:TimeZone.setDefault(TimeZone.getTimeZone("GMT+8"));
情况2、本地获取的时间没有错,存入数据库的时候时间相差8小时
原因:mybatis将本地的数据传入到mysql数据库服务器的时候,服务器会对数据进行检测,会把date类型的数据自动转换为mysql服务器所对应的时区,即0时区,所以会相差8小时
解决方法:MySQL jdbc 6.0 版本以上数据库连接信息,url加上:&serverTimezone=GMT%2B8
情况3、数据库时间没有错,获取到了后端,之后返回给前端相差8小时
原因:springboot中对加了@RestController或者@Controller+@ResponseBody注解的方法的返回值默认是Json格式,对date类型的数据,在返回浏览器端时,会被springboot默认的Jackson框架转换,而Jackson框架默认的时区GMT
解决方法:application.yml文件中添加:spring.jackson.time-zone=GMT+8