我正在更新一个调度应用程序,它可以将约会日期重复到将来。

通过找到原始约会开始时间和结束时间之间的分钟数,可以得出约会将来的约会时间。因此,例如,约会的时间为120分钟。在下面的代码中,预订时间是可以进行约会的时间段。因此,预订时间和其中的约会将被复制。这是约会复制的一个迭代。

Calendar beginCalendar = Calendar.getInstance();
beginCalendar.setTime(newBookTime.getStartDate());
beginCalendar.add(Calendar.MINUTE, bookTimeDiffMinutes);

newAppointment.setStartDate(beginCalendar.getTime());
Calendar endCalendar = Calendar.getInstance();
endCalendar.setTime(newAppointment.getStartDate());
endCalendar.add(Calendar.MINUTE, appointmentDiffMinutes);
newAppointment.setStopDate(endCalendar.getTime());


问题是在夏令时,CST变成CDT ...如果约会的开始时间在CST当天晚上11点,然后CDT一天的结束时间早上2点...我的约会在一小时后结束或更早的时间(取决于时钟是向后还是向前)。这是因为当我为约会添加X分钟时……实际上说那天少了1小时,因为我们跳过了一个小时。

因此,当我打印日期时,我可以在DST日看到时区从CST更改为CDT:

预定时间为20:00-6:00

[STDOUT] The book time start date:Sat Mar 07 20:00:00 CST 2015
[STDOUT] The book time stop date:Sun Mar 08 07:00:00 CDT 2015


而在非夏令时更改日,我们看到:

[STDOUT] The book time start date:Sun Mar 08 20:00:00 CDT 2015
[STDOUT] The book time stop date:Mon Mar 09 06:00:00 CDT 2015


我想知道如何弥补这一点,并确保在时区从CST更改为CDT的那一天,我的约会和预订时间是正确的长度。如果我有一个聪明的方法来检测更改,则可以增加或减少60分钟。

寻找输入。

最佳答案

看来目标是要有一个持续时间相同的约会,而不管约会是在白天还是在标准时间进行,还是碰巧跨越时间变化。鉴于此,那么您的代码就可以正常工作,输出反映了这样的事实,即它打印的胶印已更改:在DST生效前一天晚上20:00 CST开始的10小时约会应在07:00:00结束第二天CDT,因为该时区将“加速”一个小时。

09-12 19:30