2017-07-17 48 views
1

如果我使用谷歌圖書館google-rfc-2445(計算出現)日曆。經常性事件發生。如何檢查模式上匹配的開始日期?

String sRule = "RRULE:FREQ=YEARLY;COUNT=3;INTERVAL=2;BYMONTH=5;BYMONTHDAY=22,23,24,25,26,27,28;BYDAY=MO"; 
LocalDateIterable localDateIterable = LocalDateIteratorFactory 
      .createLocalDateIterable(sRule, org.joda.time.LocalDate.now(), true); 
LocalDateIterator iterator = localDateIterable.iterator(); 
iterator.forEachRemaining(System.out::println); 

我會得到結果:

2017年7月17日

2019年5月27日

2021-05-24

2023-05-22

考慮模式,應該只有3個日期。考慮到每一個我們可以發現,第一個是多餘的。如果開始日期有效或沒有,我沒有標記。正如你看到的第一個不是。 (如果我使用正確的開始日期創建可迭代的,我會得到的結果是3周正確的日期。)

類似實驗lib-recur(結果幾乎與小的差異相似)

RecurrenceRule recurrenceRule = new RecurrenceRule("FREQ=YEARLY;BYMONTHDAY=23;BYMONTH=5;COUNT=3"); 
RecurrenceRuleIterator it = recurrenceRule.iterator(DateTime.nowAndHere()); 
int maxInstances = 10; // limit instances for rules that recur forever 
while (it.hasNext() && (!recurrenceRule.isInfinite() || maxInstances-- > 0)) { 
    DateTime nextInstance = it.nextDateTime(); 
    System.out.println(nextInstance); 
} 

結果數是正確的,但第一次出現不是。第一次出現的正確性取決於(如果開始日期是正確的第一次出現也將是正確的)...

20170717T123104

20190527T123104

20210524T123104

我怎麼能指定或使用google-rfc-2445lib-recur以正確方式驗證開始日期?

回答

1

RFC 5545狀態

的 「DTSTART」 屬性的 「VEVENT」 指定的包容性 啓動事件。對於重複性事件,它還指定了重複集中的第一個實例 。

這就是爲什麼lib-recur總是添加啓動實例。

但是,我們對此有一個公開的問題(請參閱issue 22),我得出結論:更好的設計是隻迭代規則的實例並在稍後階段添加啓動實例(在RecurrenceSet到請明確點)。這也是RFC 5545似乎表明的。

我會照顧這和版本0.10

+0

將「固定」 FTR:0.10版本剛剛發佈,並'RecurrenceRuleIterator'不再返回開始不匹配'RRULE'實例。 – Marten

相關問題