2017-07-17 5 views
1

Wenn ich Google-Bibliothek verwenden google-rfc-2445 (um Ereignisse zu berechnen)Kalender. Wiederkehrendes Ereignis. Wie überprüft man, ob das Startdatum dem Muster entspricht?

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); 

ich in Folge bekommen:

2017-07-17

2019-05-27

2021-05-24

2023-05-22

unter Berücksichtigung Muster, es sollte nur 3 Daten sein. In Anbetracht jedes einzelnen können wir feststellen, dass der erste überflüssig ist. Ich habe keine Markierung, wenn das Startdatum gültig ist oder nicht. Und wie du zuerst siehst, ist es nicht. (Wenn ich die Schaffung iterable richtiges Startdatum nicht mehr verwenden würde ich 3 richtige Daten in Ergebnis.)

ähnliches Experiment mit lib-recur (Ergebnis fast ähnlich mit kleinen Unterschieden)

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); 
} 

Ergebnis Zahl korrekt ist, aber erstes Vorkommen ist nicht. Die Korrektheit des ersten Auftretens hängt davon ab, (wenn Startdatum auch korrekt erstes Auftreten wäre richtig) ...

20170717T123104

20190527T123104

20210524T123104

Wie könnte ich angeben oder das Startdatum korrekt mit google-rfc-2445 oder lib-recur validieren?

Antwort

1

RFC 5545 Staaten

Die "DTSTART" Eigenschaft für ein "VEVENT" gibt den inklusive Beginn der Veranstaltung. Bei wiederkehrenden Ereignissen gibt es auch die erste Instanz im Wiederholungssatz an.

Deshalb fügt lib-recur immer die Start-Instanz hinzu.

Allerdings haben wir ein offenes Problem darüber (siehe issue 22) und ich bin zu dem Schluss gekommen, dass es besser ist, nur die Instanzen der Regel zu iterieren und die Start-Instanzen zu einem späteren Zeitpunkt hinzufügen (in RecurrenceSet zu sei genau). Das scheint auch RFC 5545 zu suggerieren.

Ich werde darum kümmern und es wird in der Version 0.10

+0

FTR „fixiert“ werden: Version 0.10 wurde gerade nicht freigegeben und 'RecurrenceRuleIterator' länger kehrt starten Instanzen nicht die' RRULE' entsprechen. – Marten

Verwandte Themen