前提

数据库时区: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"
}
]

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

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. 传奇HERO引擎给装备加套装属性技巧

    装备加套装在复古的版本里比较少,但在1.76极品,轻变传奇,微变传奇和迷失版本里面用得比较多,每个引擎的方法相差不多,但也有一些小区别,今天给大家讲解下HERO引擎加套装的技巧. 第一步:我们打开M2 ...

  2. Flask 教程 第二十一章:用户通知

    本文翻译自The Flask Mega-Tutorial Part XXI: User Notifications 这是Flask Mega-Tutorial系列的第二十一章,我将添加一个私有消息功能 ...

  3. python 变量的赋值【内存地址】

    注意: python所有的数据都是对象,变量只是指向一个对象的地址,一旦将变量的值或者类型改变,变量指向的地址就有可能发生变化 这个特性在使用默认参数的时候一定要注意

  4. Codeforces 1315B Homecoming (二分)

    After a long party Petya decided to return home, but he turned out to be at the opposite end of the ...

  5. 【游戏体验】Buttonhunt(鼠标寻找按钮)

    虽然画风千奇百变 但这款益智游戏的趣味性相当高 推荐试玩 个人测评 游戏性 9/10 音乐 4/10 剧情 6/10 总评 19/30

  6. ElementUI+Vue在使用el-dialog时,如何做到在弹出dialog时,外部呈锁定状态,而不是点击外部导致dialog直接关闭。

    ElementUI+Vue在使用el-dialog时,如何做到在弹出dialog时,外部呈锁定状态,而不是点击外部导致dialog直接关闭. 问题描述 今天,在做Element+Vue项目时发现:Di ...

  7. Python--比较两个字典部分value是否相等(可以用于接口自动化)

    eg:例如你调用了一个新增的接口,以往功能测试的话,你再web端新增一个店铺之后,你肯定要去数据库中查看,这些数据插入的对不对,是否正确的插入了每个字段 # 比较两个字典部分是否相等 def comp ...

  8. 吴裕雄 python 神经网络——TensorFlow图片预处理

    import numpy as np import tensorflow as tf import matplotlib.pyplot as plt # 使用'r'会出错,无法解码,只能以2进制形式读 ...

  9. 技术学习的网站 http://www.runoob.com/

    菜鸟教程:http://www.runoob.com/ W3C:https://www.w3cschool.cn/tutorial 脚本之家:https://www.jb51.net/

  10. 【C语言】创建一个函数,将输入的2个数排序

    #include <stdio.h> void fun(int *x,int*y) { int t; if(*x>=*y) { t=*x;*x=*y;*y=t; } } main() ...