前提

数据库时区:GMT+8

  1. show variables like '%time_zone%';

本机电脑时区:

情景一、不指定时区

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

  • 保存时间

传递的参数:

  1. {
  2. "date":"2019-11-23T18:30:00"
  3. }

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

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

测试01:修改计算机时区

再次测试保存时间

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

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

获取时间:

  1. {
  2. "id": 29,
  3. "date": "2019-11-23T18:30:00.000+0000"
  4. }

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

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

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

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

获取时间:

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

此处留作疑问

情景三、指定json 映射时区

  1. spring:
  2. jackson:
  3. time-zone=GMT+5

存储测试:

  1. {
  2. "date":"2019-11-23T18:30:00"
  3. }

系统显示:

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

获取测试:

结果

  1. [
  2. {
  3. "id": 34,
  4. "date": "2019-11-23T23:30:00.000+0500"
  5. },
  6. {
  7. "id": 35,
  8. "date": "2019-11-23T23:30:00.000+0500"
  9. },
  10. {
  11. "id": 36,
  12. "date": "2019-11-23T18:30:00.000+0500"
  13. }
  14. ]

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

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

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

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

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

  1. {
  2. "date":"2019-11-23T18:30:00"
  3. }

获取测试:

  1. [
  2. {
  3. "id": 34,
  4. "date": "2019-11-23T23:30:00.000+0500"
  5. },
  6. {
  7. "id": 35,
  8. "date": "2019-11-23T23:30:00.000+0500"
  9. },
  10. {
  11. "id": 36,
  12. "date": "2019-11-23T18:30:00.000+0500"
  13. },
  14. {
  15. "id": 37,
  16. "date": "2019-11-23T18:30:00.000+0500"
  17. }
  18. ]

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

spring boot 配置时区差别的更多相关文章

  1. 【docker】centOS7上部署的mysql和spring boot服务,要求,mysql的时间、java程序服务的时间和宿主机的时间完全保持一致【修改mysql时区,临时和永久】【修改spring boot配置文件时区】【修改docker启动spring boot实例程序时区】

    要求:centOS7上部署的mysql和spring boot服务,要求,mysql的时间.java程序服务的时间和宿主机的时间完全保持一致: ============================ ...

  2. Spring Boot -- 配置切换指南

    一般在一个项目中,总是会有好多个环境.比如: 开发环境 -> 测试环境 -> 预发布环境 -> 生产环境 每个环境上的配置文件总是不一样的,甚至开发环境中每个开发者的环境可能也会有一 ...

  3. Spring Boot 配置优先级顺序

    一般在一个项目中,总是会有好多个环境.比如: 开发环境 -> 测试环境 -> 预发布环境 -> 生产环境 每个环境上的配置文件总是不一样的,甚至开发环境中每个开发者的环境可能也会有一 ...

  4. spring boot 配置注入

    spring boot配置注入有变量方式和类方式(参见:<spring boot 自定义配置属性的各种方式>),变量中又要注意静态变量的注入(参见:spring boot 给静态变量注入值 ...

  5. Spring boot配置多个Redis数据源操作实例

    原文:https://www.jianshu.com/p/c79b65b253fa Spring boot配置多个Redis数据源操作实例 在SpringBoot是项目中整合了两个Redis的操作实例 ...

  6. spring boot配置springMVC拦截器

    spring boot通过配置springMVC拦截器 配置拦截器比较简单, spring boot配置拦截器, 重写preHandle方法. 1.配置拦截器: 2重写方法 这样就实现了拦截器. 其中 ...

  7. spring boot配置mybatis和事务管理

    spring boot配置mybatis和事务管理 一.spring boot与mybatis的配置 1.首先,spring boot 配置mybatis需要的全部依赖如下: <!-- Spri ...

  8. [转] Spring Boot配置多个DataSource

    [From]  https://www.liaoxuefeng.com/article/001484212576147b1f07dc0ab9147a1a97662a0bd270c20000 Sprin ...

  9. Spring boot 配置异步处理执行器

    示例如下: 1. 新建Maven 项目 async-executor 2.pom.xml <project xmlns="http://maven.apache.org/POM/4.0 ...

随机推荐

  1. Go_sqlx和占位符

    sqlx使用 第三方库sqlx能够简化操作,提高开发效率. 安装 go get github.com/jmoiron/sqlx package main import ( "fmt" ...

  2. AC3 bit allocation

    1.bit allocation overview bit allocation通过分析audio 信号的频谱envelop,使用masking effect来确定使用多少bit来表示频率系数的man ...

  3. HTML学习(5)标题、水平线、注释

    HTML 标题 标题(Heading)是通过 <h1> - <h6> 标签进行定义的. <h1> 定义最大的标题. <h6> 定义最小的标题. 注: 浏 ...

  4. 每天进步一点点------Allegro PCB

    Allegro PCB 1.如何在allegro中取消花焊盘(十字焊盘) set up->design parameter ->shape->edit global dynamic ...

  5. 【游记】CSP-J2019谔谔记

    结果果然不能把希望寄托在渺茫的玄学上,实力不够还是不要渴求什么奇迹了. ----2020.2.21记 Day -6 考场就在我市,所以东道主应该运气会好一点吧. Day -1 听说本来准备上的中学准备 ...

  6. input file弹出框选择文件后缀限制

    在页面选择文件时的弹出框默认显示的是所有类型的文件,有时候文件太多不好选择,我们就要过滤掉不想展示的文件,这是需要用到input的accept属性,只有在type="file"才有 ...

  7. C#中使用IndexOf()判断字符串在字符串数组中第一次出现的索引位置

    ] {"}; "; //判断字符串的前几位在另一个字符串数组中第一次出现的索引位置 index = Array.IndexOf(s, s1.Substring(, ));

  8. vue移动端项目在手机上调试

    1.电脑和手机要连同一个wifi  一定是复制无线网的IP,而不是以太网的IP 2.在你的电脑上查找无线网络的ipv4地址: 查找方法:windows+r   然后再输入框里输入cmd 回车 会出现这 ...

  9. HTML5圆形百分比进度条插件circleChart

    在页面中引入jquery和circleChart.min.js文件. <script src="path/to/jquery.min.js"></script&g ...

  10. Navicat Premium破解

    1.正常下载安装 2.把PatchNavicat.exe文件放到Navicat安装目录下 3.以管理员身份启动PatchNavicat.exe 4.运行Navicat即可