iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >Mysql 时区差8小时的多种问题 统统解决
  • 317
分享到

Mysql 时区差8小时的多种问题 统统解决

mysqljava数据库 2023-08-31 16:08:47 317人浏览 薄情痞子
摘要

笑小枫专属目录 背景知识点代码中常见的三种时间差错问题【我遇到的】本地获取的时间没有错,存入数据库的时候时间相差8小时java下使用 `new date()`获取的时间会和真实的本地时间相差8

笑小枫专属目录

背景

最近在开发【Java面试 | 笑小枫】小程序,便发现老是有人半夜偷偷刷题,如下图所示:

image-20230321205840646

现在都这么卷了吗?大半夜的都不睡觉了吗?还在撸题~越想越不对,赶紧看了一下,发现自己录入题目的时间也好多都在凌晨。

好家伙,秒懂,时区错了。错就错了吧,影响也不大。

直到现在出现了每日签到的功能,好吧顺手改一下,反正也不难。都改了,顺手整理篇博客吧。

知识点

UTC:Coordinated Universal Time 协调世界时。

GMT:Greenwich Mean Time 格林尼治标准时间。(在协调世界时意义上的0时区,即GMT = UTC+0)

中国的时间是【东八区】,比GMT多八个小时,即 GMT+8(或UTC+8,但习惯上还是用GMT+8)

代码中常见的三种时间差错问题

【我遇到的】本地获取的时间没有错,存入数据库的时候时间相差8小时

mybatis将本地的数据传入到Mysql数据库服务器的时候,服务器会对数据进行检测,会把date类型的数据自动转换为mysql服务器所对应的时区,即0时区,所以会相差8小时。

解决方案:

  • 在数据库链接上添加serverTimezone=GMT%2B8

image-20230321214129614

java下使用 new date()获取的时间会和真实的本地时间相差8小时

new date()调用的是JVM时间,而jvm使用的时间默认是0时区的时间,即:和北京时间将会相差8小时。

解决方案:

  • 手动设置jvm时间:将时间改为第8时区的时间:
  • 如果是SpringBoot项目,可以面向切面加上这个,或者启动main类上加上如下代码:
TimeZone.setDefault(TimeZone.getTimeZone("GMT+8"));

数据库时间没有错,获取到了后端,之后返回给前端相差8小时

springboot中对加了@RestController或者@Controller+@ResponseBody注解的方法的返回值默认是JSON格式,所以,对date类型的数据,在返回浏览器端时,会被springboot默认的Jackson框架转换,而Jackson框架默认的时区GMT(相对于中国是少了8小时)。所以最终返回到前端结果是相差8小时。

解决方案:

  • 将spring的json构造器的时区改正即可,在application.yml文件中添加:
spring:  jackson:    date-fORMat: yyyy-MM-dd HH:mm:ss    time-zone: GMT+8
  • 可以使用注解,在entity实体类的date数据上添加注解,那么数据库传回的data数据要转换为json格式的时候就是北京时间了,再次传回到前端的时候,也不会出现时区问题。
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")private Date updateDate;

数据库代码时区的问题

以上说的都是代码中时间的问题,还有一种情况,就是sql使用NOW()获取时间,这种写法太可恶了。强烈不推荐

这种情况使用的是数据库的时间,首先我们看一下数据库时间

select NOW();
image-20230321215559765

如果和当前时间一致,那么恭喜你,没问题。

如果比当前时间少8小时,那么依旧恭喜你,你穿越了。

image-20230321215226932

言归正传,如果比当前时间少8小时,该怎么处理呢?

通过Sql命令修改,临时生效

本方法的优点是,生效快,不需要重启数据库;缺点是重启数据库后配置失效。

  1. 首先检查下Mysql系统时区
show variables like '%time_zone%';
image-20230321215721287
  1. 设置时区
-- 修改mysql全局时区为北京时间,即我们所在的东8区set global time_zone = '+08:00'; -- 修改当前会话时区,不然需要重新打开会话才会生效set time_zone = '+08:00';
  1. 立即刷新生效
flush privileges;

然后再执行一下我们的select NOW();查看一下时间,OK,时间一致

image-20230321220030720

通过配置文件来进行修改,永久性生效

本方法的优点是永久性生效,缺点是需要重启数据库

修改mysql的配置文件。linux系统上是my.cnf文件,window系统是my.ini

在[mysqld]区域中加上 default-time_zone = ‘+8:00’

重启mysql使新时区生效

总结

本文到这里就结束了。总结一下吧

  1. 代码中常见的数据问题是,程序中正常,保存到数据库中差8小时,这种情况用在数据库连接中添加serverTimezone=GMT%2B8
  2. Java下使用 new date()获取的时间会和真实的本地时间相差8小时,这个需要修改JVM时区,正常很少见
  3. 数据库时间没有错,获取到了后端,之后返回给前端相差8小时,可以通过设置json转换的时区来进行调整
  4. 修改数据库的时区,可以通过命令临时修改和通过配置文件永久性修改

image-20230321205540732

来源地址:https://blog.csdn.net/qq_34988304/article/details/129699041

您可能感兴趣的文档:

--结束END--

本文标题: Mysql 时区差8小时的多种问题 统统解决

本文链接: https://www.lsjlt.com/news/386231.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • Mysql 时区差8小时的多种问题 统统解决
    笑小枫专属目录 背景知识点代码中常见的三种时间差错问题【我遇到的】本地获取的时间没有错,存入数据库的时候时间相差8小时java下使用 `new date()`获取的时间会和真实的本地时间相差8...
    99+
    2023-08-31
    mysql java 数据库
  • 解决MySQL时区日期时差8个小时的问题
    目录场景:解决:mysql查出时间相差14小时问题重现问题排查场景: 我们在mysql客户端查询 now() 系统当前日期时间,会发现得到的结果比系统实际日期时间慢8个小时左右,这是由于不同的时区导致的 解决: 1、在 ...
    99+
    2023-01-04
    MySQL差8个小时 MySQL时区差8个小时
  • MySQL时区问题日期时差8个小时,解决方法
    场景: 我们在mysql客户端查询 now() 系统当前日期时间,会发现得到的结果比系统实际日期时间慢8个小时左右,这是由于不同的时区导致的 解决: 在 mysql 的服务端的 my.conf 文件中 [mysqld] 节点下设...
    99+
    2023-08-31
    mysql
  • 如何解决java获取时间相差8小时的问题
    目录三种时间差错问题: 原因: 解决方案: 总结:都是时区问题三种时间差错问题: java下使用new date()获取的时间会和真实的本地时间相差8小时。 本地...
    99+
    2022-11-12
  • 解决服务器时间与实际时间相差8小时问题
    Java项目解决服务器时间与实际时间相差8小时问题 ​ 在实际部署项目到服务器运行时,我们通常会发现程序在服务器上执行的时间实际上时比现实时间要慢8小时的,其实这是因为本地时区和服务器的时区不一样,差...
    99+
    2023-09-16
    服务器 java 运维
  • 解决docker容器与宿主机相差8小时的问题
    使用docker-compose部署时,在输出的日志以及相关事件校验及输出时,导致事件与现实相差8小时。 排查问题: 1.查看宿主机时间: # 查看时间 date Wed Sep...
    99+
    2022-11-12
  • 如何解决mysql 8小时空闲后连接超时的问题
    这篇文章主要为大家展示了“如何解决mysql 8小时空闲后连接超时的问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何解决mysql 8小时空闲后连接超时的...
    99+
    2022-10-18
  • 如何解决mysql中共8小时空闲后连接超时的问题
    小编给大家分享一下如何解决mysql中共8小时空闲后连接超时的问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!解决mysql中...
    99+
    2022-10-19
  • MYSQL时区导致时间差了14或13小时的解决方法
    目录CST 时区排错过程解决方案mysql时区有问题(相差13或14小时)p>我一般使用MYSQL定义字段类型时,一般使用TIMESTAMP时间戳来定义创建时间与更新时间,并将其定义为默认值为CURRENT_TIM...
    99+
    2023-01-04
    MYSQL差14小时 MYSQL差13小时
  • 如何解决springboot数据库查询时出现的时区差异问题
    目录springboot数据库查询时出现的时区差异1.在连接数据库的配置上我们添加一项2.直接在boot配置文件中增加jackson配置springboot new Date()时区...
    99+
    2023-01-06
    springboot数据库查询 数据库查询时区差异 springboot查询
  • 解决docker中mysql时间与系统时间不一致问题
    最近在Docker中装mysql时,发现数据库时间与系统时间相差8个小时。 linux服务器时间: 进入mysql,输入date如下 发现两者时区不同。因为mysql容器是在do...
    99+
    2022-11-12
  • mysql的timestamp存在时区问题怎么解决
    本篇内容介绍了“mysql的timestamp存在时区问题怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有...
    99+
    2022-10-19
  • mysql的timestamp存在的时区问题怎么解决
    这篇文章主要讲解了“mysql的timestamp存在的时区问题怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql的timestamp存在的时...
    99+
    2022-10-19
  • 如何解决docker中mysql时间与系统时间不一致问题
    这篇文章将为大家详细讲解有关如何解决docker中mysql时间与系统时间不一致问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。最近在Docker中装mysql时,发现数据库时间与系统时间相差8个小时。...
    99+
    2023-06-22
  • 如何解决Linux系统中连接超时的问题
    本篇内容主要讲解“如何解决Linux系统中连接超时的问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何解决Linux系统中连接超时的问题”吧!  IPv6被认为是IPv4&mdash...
    99+
    2023-06-13
  • 如何解决XP系统锁定时不关机的问题
    这期内容当中小编将会给大家带来有关如何解决XP系统锁定时不关机的问题,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。很多用户抱怨在使用电脑的过程中,总是经常会被琐碎的事情打断,有时候难免暂时离开电脑,处于便...
    99+
    2023-06-14
  • windows7系统中网络延迟问题的多种解决方法
    网络延迟的现象不知道在大家的电脑里频不频繁,如果很频繁出现这个问题的话,那就要动手来解决了,那么肯定会有很多用户要问:我要怎样才能解决Win7网络延迟问题啊 QoS是什么呢QoS(Quality of Service)服...
    99+
    2023-05-30
    win7 网络延迟 延迟 问题 网络 系统 解决
  • 如何解决MySQL中timestamp时区转换导致CPU %sy高的问题
    本篇文章给大家分享的是有关如何解决MySQL中timestamp时区转换导致CPU %sy高的问题,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧...
    99+
    2022-10-18
  • 如何解决win10系统更新时卡住不动的问题
    这篇文章主要介绍如何解决win10系统更新时卡住不动的问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!首先使用win+r快捷键,直接打开运行窗口,并输入services.msc命令,回车。然后可以在“服务”页面中,...
    99+
    2023-06-27
  • win7重装系统时出现的蓝屏问题如何解决
    不知道大家重装win7电脑时有没有出现过蓝屏的情况呢?如果你不知道怎么解决的话就看看下面的方法吧。1、开机一直按F2或(FN+F2)进入BIOS,按→方向键切换到Security,选择Secure Boot回车设置成Disabled。2、转...
    99+
    2023-07-10
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作