MySql時區問題

我使用的是SpringBoot,以前解決過這個問題,按理說這個問題估計開發經驗1年的人都應該知道,可是你真的能理解這背後的真實緣由嗎?html

首先,我數據庫裏面存的是這樣:2019-04-10 02:21:30    當代碼走到這一句的時候,已經把數據取出來了web

Object result = method.invoke(sqlSession, args);

能夠看到,取出來以後自動爲我加了8小時spring

仔細看這一句sql

sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null]

大體就是,先找到我當前的時區 和 相對應UTC應該換算的相差時間,兩個時間相處理,就獲得瞭如今時區("Asia/Shanghai")的時間數據庫

網上的下面貼上解決辦法什麼改數據庫啊啥的,確定是能夠的,可是!咱們能夠要走向國際化的互聯網科技啊,萬一之後遍及全球了呢,因此這個時區仍是讓代碼來解決吧跨域

一言不合貼代碼,核心加粗了app

<!-- 日期格式化 -->
<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);
    }

}
相關文章
相關標籤/搜索