Java Calendar调用add方法加1小时未生效问题原因解析
Java Calendar加1小时后显示时间无变化问题解析
问题复现
代码执行逻辑如下:
- 为Calendar对象设置Date类型时间:
打印输入的calendarObject.setTime(date);date对象,输出为预期时间:Sun Oct 31 02:00:00 CEST 2021 - 对Calendar对象执行加1小时操作:
calendarObject.add(Calendar.HOUR_OF_DAY, 1); - 打印Calendar对象的最终时间:
System.out.println(calendarObject.getTime());
实际输出仍为Sun Oct 31 02:00:00 CEST 2021,和预期的Sun Oct 31 03:00:00不符。
根因说明
该问题由时区的时令切换规则导致:
CEST(中欧夏令时)每年10月的最后一个周日会执行夏令时转冬令时的操作,当日凌晨3点整时,系统时间会自动回滚1小时回到2点。代码的加1小时逻辑已经正常执行完成,只是对应时区的显示时间恰好落在了回滚区间,所以最终打印结果和初始时间显示一致。
内容的提问来源于stack exchange,提问作者wty
相关产品推荐
相关产品推荐

