夏令时
夏令时,从每年3月第2个星期天凌晨开始,到每年11月第1个星期天凌晨结束,所以 CST:
- 没有
2020-03-08 02:00:00
~2020-03-08 03:00:00
区间的时间- 有两个
2020-11-01 01:00:00
~2020-11-01 02:00:00
区间的时间
- 美国 CST 时区对应:
UTC-06:00
非夏令时UTC-05:00
夏令时
异常例子
Calendar c = Calendar.getInstance(TimeZone.getTimeZone("CST"), [Locale.US](http://locale.us/));
c.setLenient(false);
// 2021-03-14 没有 2~3 点,触发异常:`HOUR_OF_DAY: 2 -> 3`
c.set(2021,2,14,2,0,0);
// 2020-03-08 没有 2~3 点,触发异常:`HOUR_OF_DAY: 2 -> 3`
//c.set(2020,2,8,2,0,0);
System.out.println(c.getTimeInMillis()); // 触发异常 HOUR_OF_DAY: 2 -> 3
解决方案
mysql-connector-java.jar
版本6.x
、8.x
降级为5.1.x
- 对于高版本 JDBC,连接串强制指定时区参数:
serverTimezone=GMT%2B8
(一般采用这种方式) - 对于高版本 JDBC,MySQL 数据库强制修改
time_zone
为+8:00
,而非SYSTEM