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

  • 相关阅读:
    python 函数2
    数据结构----栈
    python 函数
    数据结构----队列
    python 数据类型_字典和集合
    python 数据类型_数组和元组
    python 数据类型_整数_浮点数
    数据结构----链表
    laravel5.5 自带的忘记密码邮箱找回功能小记
    laravel5.5使用sendCloud邮件服务
  • 原文地址:https://www.cnblogs.com/testopsfeng/p/15323384.html
Copyright © 2011-2022 走看看