wiederkehrende Ereignislogik

Ich arbeite an einer Groovy / Java-Kalenderanwendung, mit der der Benutzer Ereignisse mit einem Startdatum und einer optionalen Wiederholung eingeben kann. Wenn es sich um ein wiederkehrendes Ereignis handelt, kann es wiederholt auftreten:

monatlich an einem Datum des Monats, das dem Startdatum entsprichtöchentlich an einem Wochentag, der dem Startdatum entspricAlle 2 Wochen an einem Wochentag, die dem Startdatum entsprechenetc

Ursprünglich wollte ich die Google-Kalender-API verwenden, um die gesamte Wiederholungslogik auszuführen, aber es stellte sich als enorme PITA heraus, aus Gründen, die ich weiter besprechen werde, wenn sich jemand darum kümmert.

So jetzt habe ich beschlossen, meine eigene Lösung zu rollen. Bei einem gegebenen Datum möchte ich herausfinden, ob an diesem Datum ein wiederkehrendes Ereignis auftritt. Meine Logik (im Pseudocode) lautet wie folgt:

public boolean occursOnDate(def date, def event) {

  def firstDate = event.startDate

  if (firstDate > date) {
    return false;

  } else if (event.isWeekly()) {
    return event.dayOfWeek() == date.dayOfWeek()

  } else if (event.isMonthly()) {
    return event.dayOfMonth() == date.dayOfMonth()

  } else {
    // At this point we know the event occurs every X weeks where X > 1
    // Increment firstDate by adding X weeks to it as many times as possible, without
    // going past date
    return firstDate == date
  }  
}

Diese Logik erscheint vernünftig, ist jedoch in Anbetracht aller seltsamen Randfälle (z. B. der Behandlung eines monatlich wiederkehrenden Ereignisses im Februar, dessen erstes Auftreten der 31. Januar ist) recht aufwändig zu implementieren.

Gibt es eine Bibliothek, die mir bei der Implementierung helfen kann? Einige Details wären sehr dankbar (z. B. wird für "Use Joda Time" keine Gutschrift vergeben).

anke, D

Antworten auf die Frage(6)

Ihre Antwort auf die Frage