gpt4 book ai didi

java - 如何使用 Joda Time 计算事件发生次数?

转载 作者:行者123 更新时间:2023-11-29 04:40:54 25 4
gpt4 key购买 nike

给定一个示例事件重现计划,其定义如下:

StartTime: Monday, 2016-June-06 09:00HEndTime:   Monday, 2016-August-29 10:00H Period:    Bi-weekly

这意味着,每 2 周的星期一 09:00H,直到 2016 年 8 月 29 日。但是结束时间是在 8 月 29 日星期一,也就是新一周的开始,但应该包含在时间表中(因为它在 10:00H 结束)。所以我预计该事件会发生 7 次。

相反,如果 endTime 是 8 月 29 日的 08:00H,那么我预计该事件只会发生 6 次。

现在,我使用 Joda Time 计算出现次数:Weeks.weeksBetween(startTime, endTime).dividedBy(乘数).getWeeks()

当然,这只给了我 6 次而不是 7 次,因为持续时间实际上只有 12 周,最后一次出现是在上周之后的星期一(星期日结束)。所以这不算整周。这同样适用于任何其他类型的时间表 - 月、日、年等。

如何可靠地计算两次之间事件的发生次数?

谢谢

最佳答案

使用伪代码,因为我对 Yoda 不太熟悉我是:

  1. counter = 1,someDate = 开始时间,increment = 两周
  2. 循环:someDate = someDate + increment
  3. if someDate < end time: then counter++ else 中断循环

或者,对于不喜欢循环的人:

  1. 计算开始日期和结束日期之间的确切小时数
  2. 算出 24 * 7 * 2 适合上述小时数的频率

使用 JodaTime 库的示例代码:

int multiple = 2; //or whatever periodicity is needed
ReadablePeriod jodaPeriod;
switch (mPeriodType){
case DAY:
jodaPeriod = Days.days(multiple);
break;
case WEEK:
jodaPeriod = Weeks.weeks(multiple);
break;
case MONTH:
jodaPeriod = Months.months(multiple);
break;
case YEAR:
jodaPeriod = Years.years(multiple);
break;
default:
jodaPeriod = Months.months(multiple);
}
int count = 0;
LocalDateTime startTime = new LocalDateTime(mPeriodStart.getTime());
while (startTime.toDateTime().getMillis() < mPeriodEnd.getTime()){
++count;
startTime = startTime.plus(jodaPeriod);
}
return count;

关于java - 如何使用 Joda Time 计算事件发生次数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39242619/

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