我使用的是SpringBoot,之前解决过这个问题,按理说这个问题估计开发经验1年的人都应该知道,但是你真的能理解这背后的真实原因吗?
首先,我数据库里面存的是这样:2019-04-10 02:21:30 当代码走到这一句的时候,已经把数据取出来了
Object result = method.invoke(sqlSession, args);
可以看到,取出来之后自动为我加了8小时
仔细看这一句
sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null]
大致就是,先找到我当前的时区 和 相对应UTC应该换算的相差时间,两个时间相处理,就得到了现在时区("Asia/Shanghai")的时间
网上的下面贴上解决办法什么改数据库啊啥的,肯定是可以的,但是!我们可以要走向国际化的互联网科技啊,万一以后遍布全球了呢,所以这个时区还是让代码来解决吧
一言不合贴代码,核心加粗了
<!-- 日期格式化 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-rest</artifactId> </dependency>
@Configuration @EnableWebMvc public class WebAppConfig implements WebMvcConfigurer { /** * 解决跨域 * * @param registry */ @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**").allowedOrigins("*").allowCredentials(true).allowedHeaders("*").allowedMethods("*"); } @Bean public FilterRegistrationBean corsFilter() { UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); CorsConfiguration config = new CorsConfiguration(); config.setAllowCredentials(true); config.addAllowedOrigin("*"); config.addAllowedHeader("*"); config.addAllowedMethod("*"); source.registerCorsConfiguration("/**", config); FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source)); bean.setOrder(0); return bean; } /** * 静态资源映射 */ @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("swagger-ui.html") .addResourceLocations("classpath:/META-INF/resources/"); registry.addResourceHandler("/webjars/**") .addResourceLocations("classpath:/META-INF/resources/webjars/"); } /** * 解决乱码问题 */ @Bean public HttpMessageConverter<String> responseBodyConverter() { StringHttpMessageConverter converter = new StringHttpMessageConverter(Charset.forName("UTF-8")); return converter; } /** * 添加到消息转换器 * 控制时间格式化 */ @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { converters.add(jackson2HttpMessageConverter()); } /** *定义时间格式转换器 */ @Bean public MappingJackson2HttpMessageConverter jackson2HttpMessageConverter() { MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); ObjectMapper mapper = new ObjectMapper(); mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")); converter.setObjectMapper(mapper); return converter; } /** * 设置url匹配模式 * setUseSuffixPatternMatch : 设置是否是后缀模式匹配,如“/user”是否匹配/user.*,默认真即匹配; * setUseTrailingSlashMatch : 设置是否自动后缀路径模式匹配,如“/user”是否匹配“/user/”,默认真即匹配; */ @Override public void configurePathMatch(PathMatchConfigurer configurer) { //super.configurePathMatch(configurer); configurer.setUseSuffixPatternMatch(false); configurer.setUseTrailingSlashMatch(true); } }