Java夏令时导致的问题

一、查询报错提示

报错提示: HOUR_OF_DAY: 0 -> 1

二、问题原因

通过网上查找资料得知,是中国有一段时间实施过夏令时导致的 1986-1991年 , 夏令时就是会在春夏之交当中某一天把时钟拨快一个小时的做法, 通过排查数据找到了一个有问题的日期** 1987-04-12 00:00:00这个日期是中国夏令时的开始时间,会在晚上把两点手动调成三点, 不同版本下 Asia/Shanghai 时区夏令时起始时间的不同,正是源于这种穷举配置,早期维护者认为中国标准时间的夏令时切换发生在0时,而后来又经证明发生在2时,新版本 JDK 及时修正了这个问题罢了。 所以mybatis返回时间做严格的校验会认为 1987-04-12**这一天不存在0点,应该直接从一点开始所以报错.

ps: 夏令时

​ 夏令时,(Daylight Saving Time:DST),也叫夏时制,又称“日光节约时制”和“夏令时间”,是一种为节约能源而人为规定地方时间的制度,在这一制度实行期间所采用的统一时间称为“夏令时间”。一般在天亮早的夏季人为将时间调快一小时,可以使人早起早睡,减少照明量,以充分利用光照资源,从而节约照明用电。各个采纳夏时制的国家具体规定不同。全世界有近110个国家每年要实行夏令时。

​ 1986年4月,中国中央有关部门发出“在全国范围内实行夏时制的通知”,具体做法是:每年从四月中旬第一个星期日的凌晨2时整(北京时间),将时钟拨快一小时,即将表针由2时拨至3时,夏令时开始;到九月中旬第一个星期日的凌晨2时整(北京夏令时),再将时钟拨回一小时,即将表针由2时拨至1时,夏令时结束。从1986年到1991年的六个年度,除1986年因是实行夏时制的第一年,从5月4日开始到9月14日结束外,其它年份均按规定的时段施行。在夏令时开始和结束前几天,新闻媒体均刊登有关部门的通告。1992年起,夏令时暂停实行。

优点

高纬度地区由于夏季太阳升起时间明显比冬季早,夏令时确实起到节省照明时间的作用。

正在调时间适应夏令时的工人

不少零售商对夏令时持肯定态度。美国的糖果商院集团已经游说美国国会将夏令时延长到11月,因为万圣节是糖果销售最旺的季节,而家长们不希望孩子们在天黑以后还在外面游逛。

有人认为夏令时对患有夜盲症的人大有好处。除了节约了电,也让人们养成了早睡早起的好习惯。

弊端

对低纬度地区,夏令时作用不大。尤其这些地方在夏天十分湿热,夜晚降临时闷热无法入眠,而清晨正是睡眠的好时间。

当夏令时开始和结束时,人们必须将所有计时仪器调快或调慢;当夏令时结束时,某些时间会在当天出现两次,这些都容易构成混乱。并且影响航班的时间。

夏令时违背了设定时区的原意──尽量使中午贴近太阳上中天的时间。

中国实时夏令时开始结束日期

1986年至1991年,每年四月的第2个星期日早上2点,到九月的第2个星期日早上2点之间。

1986年5月4日至9月14日(1986年因是实行夏令时的第一年,从5月4日开始到9月14日结束)

1987年4月12日至9月13日;

1988年4月10日至9月11日;

1989年4月16日至9月17日;

1990年4月15日至9月16日;

1991年4月14日至9月15日。

三、问题修复方案

  1. 在数据库系统设计时,需要用到精确时间和计算的时候尽量使用 绝对时间, 然后让这个时间在不同的时区和系统中手动转换成本地时间
  2. 在问题复现的过程中发现 OracleJDK没有这个问题,OpenJDK存在这个问题, 开发过程中本地JDK和线上JDK版本尽量保持一致
  3. mybatis查询映射过程中,尽量使用JDK8版本的时间工具类LocalDate 不要使用Date (ps: 这种方式不兼容老的系统)
  4. mybatis查询映射过程中可以使用string类型来接收时间变量,自己手动转为时间类型,不同国家不同时区对同一日期的标识是不同的
  5. 可以通过修改数据库链接的时区来解决这个问题 由 serverTimezone=Asia/Shanghai改为serverTimezone=GMT%2B8

***文章参考博客: ***

https://www.ffutop.com/posts/2021-03-15-datetime-vs-calendar/

https://pooi.app/page/2/

ps: 绝对时间

格林威治时间1970年1月1日0时0分0秒相差的毫秒数

Java夏令时导致的问题相关推荐

  1. Java夏令时导致的时间问题

    1986年至1991年,中华人民共和国在全国范围实行了六年夏令时,每年从4月中旬的第一个星期日2时整(北京时间)到9月中旬第一个星期日的凌晨2时 整(北京夏令时) 我们可以看出在中国的夏令时区间内,因 ...

  2. java 夏令时 容器 问题,Java夏令时有关问题

    Java夏令时问题 操作系统不使用 UTC 时间的情况下,操作系统会使用系统记录的夏令时跳变时间点自动进行夏令时切换. suse11 系统在 cd /usr/share/zoneinfo 中有所有时区 ...

  3. java夏令时_java-时间处理夏令时冬令时跨时区问题处理

    作为一个成熟的编程语言,java自然有一堆方法来解决的时间的问题.有的时候我们会因为对java一些内置的api不是太熟悉,对某个场景不熟悉,导致遇到了棘手的问题.比如这个场景夏令时和冬令时 夏令时和冬 ...

  4. Thinking in java 多线程导致数组越界崩溃的BUG

    作者:wenyinfeng 转载时,请注明原文出处,谢谢! //: concurrency/SynchronizationComparisons.java // Comparing the perfo ...

  5. java jvm崩溃_IObjects java 代码导致jvm崩溃了

    使用产品:9c 9.0.1 15624 65330 Beijing 操作系统:系统无关 数据类型:面计算 问题详细描述:web服务并发访问进行拓扑处理构建面会导致jvm崩溃 问题重现步骤: Topol ...

  6. 记一次线上Java程序导致服务器CPU占用率过高的问题排除过程

    1.故障现象 客服同事反馈平台系统运行缓慢,网页卡顿严重,多次重启系统后问题依然存在,使用top命令查看服务器情况,发现CPU占用率过高. 2.CPU占用过高问题定位 2.1.定位问题进程 使用top ...

  7. 写java线程导致电脑内存不足_如何写出让java虚拟机发生内存溢出异常OutOfMemoryError的代码...

    程序小白在写代码的过程中,经常会不经意间写出发生内存溢出异常的代码.很多时候这类异常如何产生的都傻傻弄不清楚,如果能故意写出让jvm发生内存溢出的代码,有时候看来也并非一件容易的事.最近通过学习< ...

  8. java 夏令时标志_夏令时随绝对日期而变化

    要了解时区结构,有助于在以下键下查看Windows注册表: HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\ 让我们看一下您提 ...

  9. jni调用java数组导致VM aborting,安卓程序莫名闪退

    如果你的程序使用了如下的场景: jint JNICALL Java_Test_WriteRCArray( JNIEnv *env, jobject obj, jintArray buf) {  jin ...

最新文章

  1. AI:一个20年程序猿的学习资料大全—前端/后端/架构师/运维各种很多教程资料——只有你不想要的,没有你找不到的
  2. hive(2)——hive基本操作
  3. c# 线向量生成多边形_python脚本实现abaqus前处理2D多晶粒建模(附完整源码)-Voronoi多边形的生成...
  4. 截取地址栏URL参数
  5. oracle data guard方案,Oracle Data Guard 概念篇
  6. sendmail发送html邮件,尝试使用sendmail发送/发送html电子邮件,但显示电子邮件的源代码...
  7. 通过官方查看springCloud,springBoot版本对应关系
  8. python os.path.split_Python中split()和os.path.split()
  9. 在Linux中的子进程是什么,什么父进程的东西在Linux中新创建的子进程中共享
  10. 谷歌大脑计划研究员Chris Olah的博客
  11. 递归装饰器正则运算模块
  12. Qt-textEdit 滚顶条设置只读模式
  13. 计算机网络第8版课后习题答案整理
  14. ug编程内公差和外公差是什么_UG编程
  15. Echarts 修改地图的标示
  16. Python pip时遇到的no moudle问题
  17. CAD看图软件查看CAD图纸
  18. Java三部曲(二)JavaWeb
  19. Linux 网络状态工具 ss 详解,比netstat更强大
  20. 计算机主板系统安装系统安装系统,重装系统_系统重装_电脑重装系统【步骤|图文教程】-太平洋IT百科手机版...

热门文章

  1. 高等数学18讲(19版)7.19
  2. 人性的弱点全集的评论
  3. Emacs使用monokai配色
  4. 小程序运行报错:[渲染层网络层错误] Failed to load local image /presource 的解决方案
  5. 9,NAT映射协议概述
  6. 弱监督目标检测相关论文阅读笔记
  7. html按钮button怎么加超链接
  8. 让Kindle支持扫描版PDF重排
  9. 降低企业运维成本,LinuxONE更具优势
  10. dp训练第25题 vijos 1059 积木城堡 背包