我的编程空间,编程开发者的网络收藏夹
学习永远不晚

springboot如何统一设置时区

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

springboot如何统一设置时区

springboot 统一设置时区

控制springboot服务的时区为东八区

@SpringBootApplication
public class Application {
  public static void main(String[] args) {
    // 设置时区为上海时区,即东八区
    TimeZone.setDefault(TimeZone.getTimeZone(ZoneId.SHORT_IDS.get("CTT")));
    SpringApplication.run(Application.class, args);
  }
}

以下是测试例子

springboot 启动时候设置时区,如下代码所示

@SpringBootApplication
public class EwPbServerApplication {

    public static void main(String[] args) {
        TimeZone timeZone = TimeZone.getTimeZone("UTC");
        TimeZone.setDefault(timeZone);
        SpringApplication.run(EwPbServerApplication.class, args);
    }
}

测试请求接口获取时间

    @GetMapping("test")
    @ApiOperation(value = "测试时间", httpMethod = "GET")
    public void test() {
        //当前时间为 2022-09-06 17:46
        //启动类设置时区后,获取当前时间
        Date date = new Date();
        DateTime date1 = DateUtil.date();
        LocalDateTime localDateTime = LocalDateTime.now();
        //设置时区为-东八区
        LocalDateTime.now(ZoneId.of("Asia/Shanghai"))

        log.info("date=={}", date);
        log.info("date1=={}", date1);
        log.info("localDateTime=={}", localDateTime);
        log.info("now=={}", now);
//        2022-09-06 09:47:01.385  xxxx  : date==Tue Sep 06 09:47:01 UTC 2022
//        2022-09-06 09:47:01.385  xxxx  : date1==2022-09-06 09:47:01
//        2022-09-06 09:47:01.386  xxxx  : localDateTime==2022-09-06T09:47:01.381
//        2022-09-06 09:47:01.386  xxxx  : now==2022-09-06T17:47:01.385
    }

由测试结果得知,springboot 启动时设置时区之后全局生效,但是优先级小于手动设置

springboot mysql 时区问题总结

寻找原因

后端开发中常见的几个时区设置

第一个设置点配置文件   spring.jackson.time-zone

第二个设置点 高版本SpringBoot版本 mysql-connector-java 用的是8.X,mysql8.X的jdbc升级了,增加了时区(serverTimezone)属性,并且不允许为空。

第三个设置点 mysql  time_zone变量

词义

serverTimezone临时指定mysql服务器的时区

spring.jackson.time-zone  设置spring默认时区

system_time_zone mysql服务器时区 ,time_zone默认System追随system_time_zone

几种情况

1、time_zone 为 System,serverTimezone为GMT+8,jackson.time-zone未定义

插入情况

再查询此条记录

个人觉得Spring默认时区为格林尼治时区,web服务器当前时区为东八区,进行加8操作。

2、set GLOBAL time_zone = '+3:00',serverTimezone为GMT+8,jackson.time-zone为GMT+8

createTime 为 timestamp类型

修改配置后,需要重启SpringBoot

新增情况

数据库中显示

查询记录

个人理解,serverTimezone设置覆盖掉了mysql的time_zone变量,跟SpringBoot会话时区还是东8

3、上述环境,不重启SpringBoot,直接改变time_zone = '+5:00'

改变后,上条记录往后调整2小时。

SpringBoot查询,一样

说明,timeStamp类型存储的是格林尼治时间,加上time_zone时区

当time_zone变化时,会话没结束,serverTimeZone东8还是对应time_zone的东3

SpringBoot插入

个人理解,serverTimeZone东8 还是和 time_zone 东3对应,但是插入发现 当前time_zone已经改成东5,就加2小时。

重启SpringBoot,重新查询

虽然,mysql变量time_zone为+5,但是重启后,serverTimeZone直接覆盖,设置时间区间为东8

重新把time_zone改回东3

改回重新打开表,发现又回来了

不启动SpringBoot,查询数据,还是老样子

此时,添加一条数据。

往前推了2小时。

SpringBoot查询

重启SpringBoot,查出来就是库中数据。

4、serverTimezone为GMT,jackson.time-zone为GMT+8,time_zone为东3

serverTimeZone为格林尼治时间,web服务器为东八,所以直接推迟8小时

取出来刚好反一下,显示正常。

此时,修改serverTimeZone为东八。

5、时间字段类型为timestamp,使用默认current_timestamp,  serverTimezone为GMT,jackson.time-zone为GMT+8,time_zone为东3

因mysql时区东三时间为

插入后数据为

但是serverTimeZone为格林尼治时间,jackson.time-zone为东八,加8小时

6、时间字段类型为datetime,serverTimezone为GMT+8,jackson.time-zone为GMT+8,time_zone为东3

插入

库中

查询

time_zone从东3修改为东5

重新打开库

不启动SpringBoot

重启SpringBoot,还是一样。

修改serverTimeZone为GMT,其他不改动

查询

总结

jackson.time-zone管前端到web服务器 转换的时区。

如果是时间类型为datetime,serverTimeZone说了算。

如果时间类型为timestamp

1、当time_zone和serverTimeZone不统一情况,会话中,表中时间数据,按照serverTimeZone设定

2、如果过程中,修改了time_zone变量,库中数据直接变更。但是不影响当前会话查询,新增数据,就会根据time_zone调整量,调整实际入库。

3、SpringBoot重启,其实就是新会话。情况同上_1。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

springboot如何统一设置时区

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

springboot如何统一设置时区

这篇文章主要介绍了springboot如何统一设置时区问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-01-06

Linux系统如何设置时区

这篇文章主要为大家展示了Linux系统如何设置时区,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带大家一起来研究并学习一下“Linux系统如何设置时区”这篇文章吧。查看Linux当前时区你可以使用如下命令非常容易地就查看到
2023-06-28

golang如何设置系统时区

golang设置系统时区的方法,在windows系统下:1、点击任务栏上的“时间和日期”;2、在显示的面板中,点击“更改日期和时间设置”;3、在“日期和时间”选项下,点击“更改时区”;4、再选择所需的时区,并点击“确定”。在linux系统下
2023-07-12

golang如何设置时区

本文小编为大家详细介绍“golang如何设置时区”,内容详细,步骤清晰,细节处理妥当,希望这篇“golang如何设置时区”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。golang设置时区的方法:1、固定时区到东八
2023-07-05

thinkphp3.2如何设置时区

这篇文章主要介绍了thinkphp3.2如何设置时区的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇thinkphp3.2如何设置时区文章都会有所收获,下面我们一起来看看吧。设置时区的方法:1、在“php.ini
2023-06-29

php5.6如何设置时区

本篇内容介绍了“php5.6如何设置时区”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!php5.6设置时区的方法:1、在PHP.INI配置文
2023-06-20

php5.4如何设置时区

这篇文章将为大家详细讲解有关php5.4如何设置时区,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。php5.4设置时区的方法:1、找到并打开php.ini文件;2、查找“date.timezone”内容;
2023-06-22

Golang如何设置时区?

Golang如何设置时区?具体如何操作?让我们一起来详细探讨一下。在Go语言中,要设置时区通常需要使用time包中的LoadLocation函数。LoadLocation函数是根据IANA时区数据库加载指定时区的函数。通过设置时区,我们可
Golang如何设置时区?
2024-02-28

linux的时区如何设置

这篇文章主要为大家展示了“linux的时区如何设置”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“linux的时区如何设置”这篇文章吧。方法:1、在终端执行tzselect命令;2、依次选择“As
2023-06-22

Linux中如何查看系统时间和设置时区

要查看系统时间,可以在命令行中输入以下命令:date要设置系统时区,可以在命令行中输入以下命令:sudo timedatectl set-timezone 其中,应该替换为您想要设置的时区,例如Asia/Shanghai
Linux中如何查看系统时间和设置时区
2024-03-13

php中ci如何设置时区

这篇文章将为大家详细讲解有关php中ci如何设置时区,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。php ci设置时区的方法:首先找到并打开“conifg/config.php”文件;然后在文件中添加代码
2023-06-15

windows11如何设置中国时区

这篇“windows11如何设置中国时区”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“windows11如何设置中国时区”文
2023-07-01

go语言如何设置时区

本文小编为大家详细介绍“go语言如何设置时区”,内容详细,步骤清晰,细节处理妥当,希望这篇“go语言如何设置时区”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。两种设置方式:1、固定时区,语法“var c = ti
2023-07-04

Linux中如何设置时区和时间

这篇文章主要介绍了Linux中如何设置时区和时间,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。以印度时区为例:时区的设置修改时区rm /etc/localtime``ln -
2023-06-27

ubuntu系统如何重置时区

这篇文章主要介绍了ubuntu系统如何重置时区,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1、在虚拟机中打开ubuntu系统后,看到系统显示时间是星期天的下午,而外面系统显
2023-06-13

SpringBoot如何设置动态定时任务

这篇文章主要介绍了SpringBoot如何设置动态定时任务的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SpringBoot如何设置动态定时任务文章都会有所收获,下面我们一起来看看吧。之前写过文章记录怎么在Sp
2023-07-02

php如何设置时区为中国

本文小编为大家详细介绍“php如何设置时区为中国”,内容详细,步骤清晰,细节处理妥当,希望这篇“php如何设置时区为中国”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。php设置时区为中国的方法:1、打开配置文件“
2023-07-05

php如何设置时区为日本

这篇文章主要介绍“php如何设置时区为日本”,在日常操作中,相信很多人在php如何设置时区为日本问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”php如何设置时区为日本”的疑惑有所帮助!接下来,请跟着小编一起来
2023-07-05

SpringBoot中JPA + AuditingEntityListener时区设置方式是什么

这篇文章将为大家详细讲解有关SpringBoot中JPA + AuditingEntityListener时区设置方式是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。JPA + Audi
2023-06-22

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录