【发布时间】:2012-02-08 06:57:30
【问题描述】:
我正在更新一个能够在未来重复约会日期的日程安排应用程序。
通过查找原始约会开始时间和结束时间之间的分钟数来计算约会未来约会时间。因此,例如,约会时长为 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 分钟。
寻找输入。
【问题讨论】:
-
我很困惑,你的意思是约会应该是相同的持续时间,还是应该同时结束......如果目标是有一个 10 小时的约会,你有在您的示例中的这两种情况下......约会总是在同一时间结束和开始的目标,无论开始或结束在哪个时区?
-
让我们看看上面的预订时间......你可以看到他们在 3 月 8 日/9 日预订时间是 20:00-6:00,而在 DST 切换日预订时间是 20:00 -7:00 多一个小时。它在正确的时间开始,但在更晚的时间结束。这是因为这一天实际上比所有日子都短一个小时。但是,我希望预订时间在 6:00 结束。所以当我在这一天时,我应该减少几分钟来实现同样的事情。嗯嗯,其实现在想起来,也许应该晚点结束,因为时间应该是一样的。也许这正在按我需要的方式工作。我稍后会更新。
-
你是对的。回答问题,我会接受。谢谢!我把头埋在代码中,以至于我实际上并没有想到现实世界。而且,是的,您当然希望相同的约会持续时间而不是相同的结束时间!
标签: java