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

java.lang.IllegalArgumentException: HOUR_OF_DAY: 0 -> 1

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

北京

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

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

看不清楚,换张图片

免费获取短信验证码

java.lang.IllegalArgumentException: HOUR_OF_DAY: 0 -> 1

mysql数据查询出现时区问题

环境:mysql5.7, springboot2.2.3版本 ,mybatis,mysql-connector-java 8.0.21,jdk openjdk:8u212-jdk-alpine

出现的问题:

org.springframework.dao.TransientDataAccessResourceException: Error attempting to get column 'csrq' from result set.  Cause: java.sql.SQLException: HOUR_OF_DAY: 0 -> 1 ; HOUR_OF_DAY: 0 -> 1; nested exception is java.sql.SQLException: HOUR_OF_DAY: 0 -> 1 at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:110) at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72) at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81) at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81) at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:91) at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:441) at com.sun.proxy.$Proxy109.selectList(Unknown Source) at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:224) at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.executeForMany(MybatisMapperMethod.java:173) at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:78) at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148) at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89) at com.sun.proxy.$Proxy144.selectSynDataThree(Unknown Source) at com.voiceai.service.impl.SampleReportServiceImpl.scheduleSynData(SampleReportServiceImpl.java:75) at com.voiceai.service.impl.SampleReportServiceImpl$$FastClassBySpringCGLIB$$246fe6a3.invoke(<generated>) at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:687) at com.voiceai.service.impl.SampleReportServiceImpl$$EnhancerBySpringCGLIB$$fc30ecf9.scheduleSynData(<generated>) at com.voiceai.common.task.SampleReportTask.executeInternal(SampleReportTask.java:46) at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:75) at org.quartz.core.JobRunShell.run(JobRunShell.java:202) at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) Caused by: java.sql.SQLException: HOUR_OF_DAY: 0 -> 1 at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129) at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97) at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:89) at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:63) at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:73) at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:85) at com.mysql.cj.jdbc.result.ResultSetImpl.getTimestamp(ResultSetImpl.java:914) at com.mysql.cj.jdbc.result.ResultSetImpl.getTimestamp(ResultSetImpl.java:959) at com.alibaba.druid.filter.FilterChainImpl.resultSet_getTimestamp(FilterChainImpl.java:1258) at com.alibaba.druid.filter.FilterAdapter.resultSet_getTimestamp(FilterAdapter.java:1829) at com.alibaba.druid.filter.FilterChainImpl.resultSet_getTimestamp(FilterChainImpl.java:1254) at com.alibaba.druid.proxy.jdbc.ResultSetProxyImpl.getTimestamp(ResultSetProxyImpl.java:740) at com.alibaba.druid.pool.DruidPooledResultSet.getTimestamp(DruidPooledResultSet.java:365) at sun.reflect.GeneratedMethodAccessor266.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.ibatis.logging.jdbc.ResultSetLogger.invoke(ResultSetLogger.java:69) at com.sun.proxy.$Proxy135.getTimestamp(Unknown Source) at org.apache.ibatis.type.DateTypeHandler.getNullableResult(DateTypeHandler.java:39) at org.apache.ibatis.type.DateTypeHandler.getNullableResult(DateTypeHandler.java:28) at org.apache.ibatis.type.BaseTypeHandler.getResult(BaseTypeHandler.java:85) at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.createRowKeyForMappedProperties(DefaultResultSetHandler.java:1057) at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.createRowKey(DefaultResultSetHandler.java:1019) at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.applyNestedResultMappings(DefaultResultSetHandler.java:946) at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.getRowValue(DefaultResultSetHandler.java:434) at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleRowValuesForNestedResultMap(DefaultResultSetHandler.java:909) at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleRowValues(DefaultResultSetHandler.java:326) at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleResultSet(DefaultResultSetHandler.java:301) at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleResultSets(DefaultResultSetHandler.java:194) at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:65) at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:79) at com.baomidou.mybatisplus.core.executor.MybatisSimpleExecutor.doQuery(MybatisSimpleExecutor.java:69) at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:325) at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156) at com.baomidou.mybatisplus.core.executor.MybatisCachingExecutor.query(MybatisCachingExecutor.java:165) at com.baomidou.mybatisplus.core.executor.MybatisCachingExecutor.query(MybatisCachingExecutor.java:92) at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140) at sun.reflect.GeneratedMethodAccessor127.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:427) ... 16 common frames omitted Caused by: com.mysql.cj.exceptions.WrongArgumentException: HOUR_OF_DAY: 0 -> 1 at sun.reflect.GeneratedConstructorAccessor151.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61) at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) at com.mysql.cj.result.SqlTimestampValueFactory.localCreateFromTimestamp(SqlTimestampValueFactory.java:112) at com.mysql.cj.result.SqlTimestampValueFactory.localCreateFromTimestamp(SqlTimestampValueFactory.java:50) at com.mysql.cj.result.AbstractDateTimeValueFactory.createFromTimestamp(AbstractDateTimeValueFactory.java:87) at com.mysql.cj.protocol.a.MysqlTextValueDecoder.decodeTimestamp(MysqlTextValueDecoder.java:81) at com.mysql.cj.protocol.result.AbstractResultsetRow.decodeAndCreateReturnValue(AbstractResultsetRow.java:87) at com.mysql.cj.protocol.result.AbstractResultsetRow.getValueFromBytes(AbstractResultsetRow.java:241) at com.mysql.cj.protocol.a.result.ByteArrayRow.getValue(ByteArrayRow.java:91) ... 52 common frames omitted Caused by: java.lang.IllegalArgumentException: HOUR_OF_DAY: 0 -> 1 at java.util.GregorianCalendar.computeTime(GregorianCalendar.java:2829) at java.util.Calendar.updateTime(Calendar.java:3393) at java.util.Calendar.getTimeInMillis(Calendar.java:1782) at com.mysql.cj.result.SqlTimestampValueFactory.localCreateFromTimestamp(SqlTimestampValueFactory.java:108) ... 58 common frames omitted  

线上发现 有一批数据无法从数据库进入队列。在排查数据查询条件无误后,在日志发现查询报错。发现字段“csrq”出现问题,这个字段在数据库里面是
csrq datetime DEFAULT NULL COMMENT ‘出生日期’,
由于无法找到具体原因,直接google
发现 两篇比较有用的文章
链接: MySQL中Date,夏令时时间转换引发的错误HOUR_OF_DAY: 0 -> 1,及解决办法
链接: Spring Data JPA 报 HOUR_OF_DAY: 0 -> 1异常的解决过程和方案

按照文中说的几个时间点,确实存在一个1947-4-15 00:00:00
这个时间段,然后在本地环境测试确实出现。。
测试过程中还有比较奇怪的情况,按照文章中的测试方法

import java.util.Calendar;import java.util.Date;public class Test {    public static void main(String[] args) {            Calendar cal=Calendar.getInstance();            cal.setLenient(false);            cal.set(1947,4,15,0,0,0);            System.out.println(cal.getTime());    }}

我本地的电脑jdk1.8.0_181 在1947-4-15 00:00:00 这个时间不会出现问题,在1947-3-15 00:00:00会出现报错,还有就是在1996-12-01 00:00:00 也会报错
换成jdk 11的版本 也是这样

解决办法

1.线上问题先解决

先将1947-3-15 00:00:00 改到1点, 一点内是没用的哈,比如:00:59:00

2.尝试解决方案

1.按照第一篇和其他网上的说法,已经确实设置了时区serverTimezone=Asia/Shanghai2.尝试过将Date改为LocalDate,但是业务上行不通,数据最后需要转为格式化yyyy-MM-dd HH:mm:ss,用fastjson和jacksjon都没有办法转为这种格式。转出来的数据不是序列化不对,就是转成了一个分段的json对象。最后根据看到日志中Date class是java.util.Date, 想到java.sql.Date这个类,按照原来的经验这个类是会处理一些特殊的情况。比如 数据库表 create _time  字段为 timestamp 类型,要用java.sql. Timestamp 来接收。

3.最后方案

将java.util.Date 改为 java.sql.Date

改为这个以后测试确实OK了,在对象转jsonString 的时候 1947-4-15 00:00:00 时间默认转成了1947-4-15 01:00:00
,其他时间字段,只要是正常的,转出来以后也是正常的。
原来一直没有注意这个问题,包括很多自动生成工具,如果是时间类型,生成的bean中的Date 都是java.util.Date,看了很多文章,夏令时问题,这个是在9几年没有

来源地址:https://blog.csdn.net/liujia_It/article/details/128313611

免责声明:

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

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

java.lang.IllegalArgumentException: HOUR_OF_DAY: 0 -> 1

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

下载Word文档

猜你喜欢

Python中的shape[0]、shape[1]和shape[-1]使用方法

目录.shape的使用方法shape[0]的使用方法shape[1]的使用方法python中shape[0]与shape[1]shape函数是Numpy中的函数,它的功能是读取矩阵的长度,比如shape[0]就是读取矩阵第一维度的长度。直
2023-08-08

学习seo如何从0到1

在没有任何基础的情况下,只身入门SEO难吗?这个疑惑没有什么既定的答案,俗话说业精于勤荒于戏,行成于思毁于随,如果你有高考一般的心态来学习,那seo就是不难的。但是我们高考时候的学习往往讲究的是学习方法和技巧不是吗? 除了一些真正自
2023-06-04

Java中system.exit(0)和system.exit(1)区别

本文主要介绍了Java中system.exit(0)和system.exit(1)区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-05-20

Python中X[:,0]和X[:,1]的用法

X[:,0]是numpy中数组的一种写法,表示对一个二维数组,取该二维数组第一维中的所有数据,第二维中取第0个数据,直观来说,X[:,0]就是取所有行的第0个数据, X[:,1] 就是取所有行的第1个数据。 举例说明:import nump
2022-06-02

(C和指针) #if 0/#if 1...#end if

#if 0还有一个重要的用途就是用来当成注释,如果你想要注释的程序很长,这个时候#if 0是最好的,保证不会犯错误
2022-11-15

Python中X[:,0]和X[:,1]怎么用

这篇文章将为大家详细讲解有关Python中X[:,0]和X[:,1]怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。python有哪些常用库python常用的库:1.requesuts;2.scrap
2023-06-15

c语言中1和0表示什么

c 语言中,1 和 0 表示布尔值。1 表示真(非零值),0 表示假(零值)。布尔值可以用 bool 数据类型或宏 true 和 false 表示。C 语言中 1 和 0 表示什么?在 C 语言中,1 和 0 代表布尔值,也就是真和假。
c语言中1和0表示什么
2024-05-10

【Java从0到1学习】13 Java IO流

1. 流 1.1 流的概念 流(stream)的概念源于UNIX中管道(pipe)的概念。在UNIX中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备、外部文件等。 一个流,必有源端和目的端,它们可以是计算机内存的某
2023-08-30

如何使用np.where()[0] 和 np.where()[1]

如何使用np.where()[0] 和 np.where()[1]?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。具体如下:import numpy as np a = np.a
2023-06-08

vlookup中0或1的区别有哪些

小编给大家分享一下vlookup中0或1的区别有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!vlookup中0或1区别是:1、条件判断时,0被当成逻辑值FALSE,1(任意非0数值)都被当成逻辑值TRUE;2、用作函
2023-06-20

从0到1之路 Python执行SQL脚本

目标:使用python执行sql脚本 设想:从数据库读取数据,和前端进行比对,返回判断结果
2023-01-31

编程热搜

目录