zoukankan      html  css  js  c++  java
  • SpringBoot:时区差8小时问题

    在编写代码过程中,遇到一个问题,在服务器上写入时间为:2021-09-22 08:00:00,但在本机测试写入的时间为:2021-09-22 00:00:00

    首先是怀疑服务器上的时间不正确,但经验证后发现不是:

    $ date
    
    # Output:Thu Sep 23 10:40:09 CST 2021  // 显示的是当前时间
    # 以下是解决办法:
    $ yum install ntpdate -y
    $ ntpdate 0.asia.pool.ntp.org
    

    其次怀疑服务器连接参数serverTimezone写错了,但实际上没有写错:

    serverTimezone=GMT%2B8
    

    查询资料过程中,发现了一个易错的地方,即前端取时间可能会少了8小时,通过以下代码解决:

    spring:
        #解决前端取回日期少8个小时问题
        jackson:
            date-format: yyyy/MM/dd HH:mm:ss
            time-zone: GMT+8
    

    然后,通过设置Java程序的时区解决了问题,在SpringBoot启动类中添加设置时区的方法:

    @SpringBootApplication
    public class Application {
        @PostConstruct
        void init() {
            TimeZone.setDefault(TimeZone.getTimeZone("GMT+8"));
        }
        public static void main(String[] args) {
            SpringApplication.run(MallApplication.class, args);
        }
    }
    

    最后,在查找具体原因的时候发现,由于代码是部署在Docker容器中,而Docker容器中的时区是不正确的,如:

    $ date
    # Output:Thu Sep 23 03:13:55 UTC 2021  // 使用了UTC的时间
    

    由于不想在容器中同步时间,所以使用设置Java程序的时区即可

  • 相关阅读:
    BigPipe_高性能流水线页面技术
    高并发大流量网站 10 个解决方法
    崇高不是比惨
    utf-8无bom格式编码
    go.php
    微信+QQ跳转
    java 设计模式-单例
    HTML连载88-今天把努比亚界面仿真写完了(完结连载)
    Android连载10-动态添加页面、创建一个新闻app
    JavaScript连载9-三目运算符、综合复习
  • 原文地址:https://www.cnblogs.com/testopsfeng/p/15323384.html
Copyright © 2011-2022 走看看