夏令时
夏令时从每年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);
c.set(2021,2,14,1,0,0); // Ok
//c.set(2021,2,14,2,0,0); // Error
//c.set(2020,2,8,1,0,0); // Ok
//c.set(2020,2,8,2,0,0); // Error
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