gpt4 book ai didi

java - Java 时间的重复事件(java.time 或任何时间库)

转载 作者:行者123 更新时间:2023-11-30 08:47:16 25 4
gpt4 key购买 nike

<分区>

我正在使用非常简单的重复模式(每 x 天或每 x 周)在 Java 中对重复发生的事件进行建模。给定一个事件对象,其中包含 startDateTimeendDateTime 和以天为单位的重复(具有来自 java.time 包的 Period 类型),我想查明事件是否在给定日期发生(考虑夏令时)。

关于“考虑夏令时”的一些背景(在评论中提出要求后):

  • 这些事件用于安排员工的工作类次。
  • 员工全天候 24/7 轮类工作(通常是 8 小时)
  • 夜类从 0:00 开始,到 8:00 结束。因此,在 DST 更改时,类次可以是 7 小时或 9 小时。在任何情况下应该有差距。

我目前正在以一种不太高效的方式执行此操作:

public class Event {
ZonedDateTime start;
ZonedDateTime end;
Period recurrence; // e.g. 7 days

public boolean includes(ZonedDateTime dateTime) {
ZonedDateTime tmpStart = startDate;
ZoneDateTime tmpEnd = endDate;
do {
if (dateTime.isAfter(tmpStart) && dateTime.isBefore(tmpEnd))
return true;
tmpStart = tmpStart.plus(recurrence);
tmpEnd = tmpEnd.plus(recurrence);
} while (dateTime.isAfter(tmpStart));

return false;
}
}

例子对于以下事件

start = 2015-09-07T00:00
end = 2015-09-07T08:00
recurrence = Period.ofDays(7)

调用 includes 产生以下结果:

assertTrue(event.includes(2015-09-14T01:00)
assertTrue(event.includes(2015-09-21T01:00)
assertFalse(event.includes(2015-09-21T09:00)

执行此操作的高效方法是什么(如前所述,考虑 DST)?我还想在日历上显示这些事件。

更新:possible duplicate使用我在上面使用的完全相同的算法。有没有更快的方法来执行此操作而无需遍历所有日期?

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com