【发布时间】:2021-11-30 11:07:29
【问题描述】:
我有一个日历对象,我将日期设置为:
calendarObject.setTime(date);
日期是一个日期对象,我打印日期对象并拥有我想要的日期:Sun Oct 31 02:00:00 CEST 2021
然后我想将 1 小时添加到我的日期对象为 31/10/2021 02:00:00 的日历对象,所以我这样做:
calendarObject.add(Calendar.HOUR_OF_DAY, 1);
我再次打印日历对象:
System.out.println(calendarObject.getTime());
并再次显示 Sun Oct 31 02:00:00 CEST 2021 但我想要 Sun Oct 31 03:00:00 但我不知道为什么它不起作用
解决: 问题是 10 月 31 日凌晨 3 点的时区回滚到凌晨 2 点,(当天的小时变化)所以它增加了 1 小时,但在凌晨 3 点,小时再次变为凌晨 2 点。
【问题讨论】:
-
10 月 31 日凌晨 2 点后 1 小时是 10 月 31 日凌晨 2 点。这是一个时间循环……嗯,不,是夏天结束,时钟倒退的时候。
-
我只是要把它放在那里......你为什么还在使用
Calendar?!是时候(双关语)继续使用经过大幅改进和更新的java.timeAPI,它可以让您克服这些问题 -
所以问题是我加了 1 小时,但检测到这是由于夏天而改变的时间,所以它保持相同的时间,因为我加了 1,但系统也在减去1小时? @JoachimSauer
-
10 月 31 日凌晨 3 点,该时区的时间将回滚到凌晨 2 点。 IE。 当天第二次是凌晨 2 点。这就是夏令时转换的工作方式(或者他们在一天中留下 1 小时的间隙)。尝试再次添加 1 小时,您会发现它现在继续运行... 是的,我同意 @MadProgrammer:使用
java.time,这是一个非常更明智的 API。 -
是的,解决,问题是你们都在说...在凌晨 3 点时区回滚,我已经解决了一个简单的检查方法,现在我将使用 java.time,谢谢给大家!!