• 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程序的时区即可

  • 相关阅读:
    Cheapest Palindrome(区间DP)
    Dividing coins (01背包)
    Cow Exhibition (01背包)
    Bone Collector II(01背包kth)
    饭卡(01背包)
    Charm Bracelet(01背包)
    Investment(完全背包)
    Bone Collector(01背包)
    Robberies(01背包)
    ACboy needs your help(分组背包)
  • 原文地址:https://www.cnblogs.com/testopsfeng/p/15323384.html
Copyright © 2020-2023  润新知