“夏令时”的版本间的差异

来自姬鸿昌的知识库
跳到导航 跳到搜索
(建立内容为“一次生产环境遇到的问题”的新页面)
 
第1行: 第1行:
一次生产环境遇到的问题
+
=== 一次生产环境遇到的问题 ===
 +
现象是程序运行过程中查询用户的数据抛异常:<syntaxhighlight lang="java">
 +
java.lang.IllegalArgumentException: HOUR_OF_DAY: 0 -> 1
 +
 
 +
at java.util.GregorianCalendar.computeTime(GregorianCalendar.java:2829)
 +
at java.util.Calendar.updateTime(Calendar.java:3395)
 +
at java.util.Calendar.getTimeInMillis(Calendar.java:1782)
 +
</syntaxhighlight>进一步定位发现只要查询一条出生日期是 1941-03-15 的数据,程序就会抛这个异常,但查别的数据都没有问题
 +
 
 +
=== 具体的实现是 ===
 +
表 user 中有一个 date 类型的字段 birth_date,用来存储用户的出生年月日,
 +
 
 +
对应 Java 代码中的 User 类中声明的 java.util.Date 类型的 birthDate,然后应用了 Mybatis 执行查询,
 +
 
 +
对应的 mapper 映射文件是:<syntaxhighlight lang="xml">
 +
……
 +
<resultMap type="User" id="UserResult">
 +
  ……
 +
  <result property="birthDate" column="birth_date">
 +
  ……
 +
</resultMap>
 +
……
 +
<select id="selectUserList" resultMap="UserResult">
 +
  select * from user
 +
</select>
 +
……
 +
</syntaxhighlight>大概就是上面这样
 +
 
 +
 
 +
pom.xml 文件中<syntaxhighlight lang="xml">
 +
<dependency>
 +
  <groupId>com.mysql</groupId>
 +
  <artifactId>mysql-connector-j</artifactId>
 +
  <version>8.2.0</version>
 +
</dependency>
 +
 
 +
<!--
 +
<dependency>
 +
  <groupId>mysql</groupId>
 +
  <artifactId>mysql-connector-java</artifactId>
 +
  <version>8.0.28</version>
 +
</dependency>
 +
 
 +
<dependency>
 +
  <groupId>mysql</groupId>
 +
  <artifactId>mysql-connector-java</artifactId>
 +
  <version>8.0.23</version>
 +
</dependency>
 +
 
 +
<dependency>
 +
  <groupId>mysql</groupId>
 +
  <artifactId>mysql-connector-java</artifactId>
 +
  <version>8.0.21</version>
 +
</dependency>
 +
-->
 +
</syntaxhighlight>

2025年8月19日 (二) 02:10的版本

一次生产环境遇到的问题

现象是程序运行过程中查询用户的数据抛异常:

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

	at java.util.GregorianCalendar.computeTime(GregorianCalendar.java:2829)
	at java.util.Calendar.updateTime(Calendar.java:3395)
	at java.util.Calendar.getTimeInMillis(Calendar.java:1782)

进一步定位发现只要查询一条出生日期是 1941-03-15 的数据,程序就会抛这个异常,但查别的数据都没有问题

具体的实现是

表 user 中有一个 date 类型的字段 birth_date,用来存储用户的出生年月日,

对应 Java 代码中的 User 类中声明的 java.util.Date 类型的 birthDate,然后应用了 Mybatis 执行查询,

对应的 mapper 映射文件是:

……
<resultMap type="User" id="UserResult">
  ……
  <result property="birthDate" column="birth_date">
  ……
</resultMap>
……
<select id="selectUserList" resultMap="UserResult">
  select * from user
</select>
……

大概就是上面这样


pom.xml 文件中

<dependency>
  <groupId>com.mysql</groupId>
  <artifactId>mysql-connector-j</artifactId>
  <version>8.2.0</version>
</dependency>

<!--
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>8.0.28</version>
</dependency>

<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>8.0.23</version>
</dependency>

<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>8.0.21</version>
</dependency>
-->