zoukankan      html  css  js  c++  java
  • spring boot 配置时区差别

    前提

    数据库时区:GMT+8

    show variables like '%time_zone%';

    本机电脑时区:

    情景一、不指定时区

    传递的参数映射到Data不指定时区,连接数据库不指定时区,保存时间以及获取时间如下:

    • 保存时间

    传递的参数:

    {
        "date":"2019-11-23T18:30:00"
    }

     注备:GMT 格林威治时间 ,UTC 标准时间,ISO 标准时间,CST 北京时间 ,GMT = UTC ,例如 GMT+8 = UTC+8

    时间相差了 8消失,想要保存的是23日6点半,实际保存的是24日2点半。系统日志打印的也是相差了8小时。

    测试01:修改计算机时区

     再次测试保存时间

     

     系统与数据库并不受影响,所以系统时间不会影响。如果不指定时区,程序默认使用 CST 中国时区显示在控制台。而接收的时间默认是 GMT+0 

    由于认为输入的时区是0 区,而保存的是+8 区,所以快了8小时

    获取时间:

        {
            "id": 29,
            "date": "2019-11-23T18:30:00.000+0000"
        }

    获取时间是正确的,没有指定时区,获取的时区是数据库GMT8 区是时间,转换为对象会没有指定时区是GMT 0区,减去8小时显示

    情景二、指定数据库连接时区

    url: jdbc:mysql://localhost:3306/test?serverTimeZone=GMT+10

    测试证明,连接时区对存储日期不受影响

    获取时间:

    测试证明,连接时区对获取时间没有影响

    此处留作疑问

    情景三、指定json 映射时区

    spring:
        jackson:
            time-zone=GMT+5

    存储测试:

    {
        "date":"2019-11-23T18:30:00"
    }

    系统显示:

     

     系统日志显示北京时间23日9点半,比存入时间快了3小时。数据库也是快了3小时。那么当指定时区时,系统不再使用 0 区,而是将输入的时间表有时区。

    获取测试:

    结果

    [
        {
            "id": 34,
            "date": "2019-11-23T23:30:00.000+0500"
        },
        {
            "id": 35,
            "date": "2019-11-23T23:30:00.000+0500"
        },
        {
            "id": 36,
            "date": "2019-11-23T18:30:00.000+0500"
        }
    ]

    只有最后一个时间是正确的,之前的时间都是错误的。

    错误分析:从数据库获取的时间是+8 区是时间,现在指定了json 时区,前2者是按0区存储的,现在显示的转换为+5区,导致错误偏移了5小时。

    情景四、设置全局时区,且设置了json 时区

    TimeZone.setDefault(TimeZone.getTimeZone("GMT+5"));

    在启动类上加入时区代码,保存测试

    {
        "date":"2019-11-23T18:30:00"
    }

     

     获取测试:

    [
        {
            "id": 34,
            "date": "2019-11-23T23:30:00.000+0500"
        },
        {
            "id": 35,
            "date": "2019-11-23T23:30:00.000+0500"
        },
        {
            "id": 36,
            "date": "2019-11-23T18:30:00.000+0500"
        },
        {
            "id": 37,
            "date": "2019-11-23T18:30:00.000+0500"
        }
    ]

    测试证明,全局时区只是显示的控制控制台打印的时间,不会影响其他

  • 相关阅读:
    mysql 主从架构搭建
    tomcat+nginx 反向代理 动静分离
    ELK(Elasticsearch + Logstash + Kibana)安装部署对nginx的日志收集
    Kibana server is not ready yet出现的原因
    apache+tomcat+单机双实例+动静分离+负载均衡
    docker的基本安装和简单使用+Dockerfile常用指令
    LVS+keepalived+DR 负载均衡高可用
    md5sum摘要
    python爬虫
    python和数据库
  • 原文地址:https://www.cnblogs.com/bytecodebuffer/p/11918953.html
Copyright © 2011-2022 走看看