gpt4 book ai didi

java - 如何使用 Joda Time 检查 DateTime 是否发生重复事件?

转载 作者:太空宇宙 更新时间:2023-11-04 07:33:37 25 4
gpt4 key购买 nike

我有一个 DateTime 表示重复事件的开始。 (每日周期)将代表循环周期。我认为这种重复发生的事件永远不会停止。

from = "2013-06-27"  
period = 3 days
nextOccurence will be "2013-06-30", "2013-07-03", "2013-07-06", and so on.
"2013-07-03" is an occurence but "2013-07-04" isn't an occurence.

我想知道就性能而言确定 DateTime 是否发生重复事件的最佳方法是什么?从长远来看,程序将需要检查“2014-07-03”或“2015-07-03”是否出现。

最佳答案

这会在我的机器上在 180 毫秒内运行所有五项检查。或者每秒检查 27 次,即检查 300 年后的日期。

@Test
public void isOccurrence() {
long startTime = System.currentTimeMillis();

assertTrue(isOccurrence(new DateMidnight(2010, 1, 10), 3, new DateTime(2010, 1, 19, 0, 0)));
assertFalse(isOccurrence(new DateMidnight(2010, 1, 10), 3, new DateTime(2010, 1, 18, 0, 0)));

assertTrue(isOccurrence(new DateMidnight(2010, 1, 10), 3, new DateTime(2310, 1, 19, 0, 0)));
assertFalse(isOccurrence(new DateMidnight(2010, 1, 10), 3, new DateTime(2310, 1, 20, 0, 0)));

assertTrue(isOccurrence(new DateMidnight(2010, 1, 10), 3, new DateTime(2010, 1, 10, 0, 0)));

System.out.println("elapsed=" + (System.currentTimeMillis() - startTime));
}

public boolean isOccurrence(DateMidnight startDate, int dayIncrement, DateTime testTime) {
DateMidnight testDateMidnight = testTime.toDateMidnight();
while (startDate.isBefore(testDateMidnight)) {
startDate = startDate.plusDays(dayIncrement);
}
return startDate.equals(testDateMidnight);
}

关于java - 如何使用 Joda Time 检查 DateTime 是否发生重复事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17327023/

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