логика повторяющихся событий

Я работаю над приложением типа календаря Groovy / Java, которое позволяет пользователю вводить события с начальной датой и необязательным повторением. Если это повторяющееся событие, оно может повторяться:

ежемесячно в день месяца, который соответствует дате началаеженедельно в день недели, соответствующий дате началакаждые 2 недели в день недели, соответствующий дате началаи т.п.

Изначально я планировал использовать API календаря Google для выполнения всей логики повторения, но это оказалось огромным PITA, по причинам, которые я буду обсуждать дальше, если кому-то будет интересно.

Итак, теперь я решил свернуть свое собственное решение. Учитывая дату, я хочу выяснить, происходит ли повторяющееся событие в эту дату. Моя логика (в псевдокоде) будет выглядеть следующим образом:

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

Эта логика кажется разумной, но на самом деле будет достаточно много усилий для реализации, когда вы рассмотрите все странные крайние случаи (например, как обработать ежемесячное повторяющееся событие в феврале, первое появление которого - 31 января).

Есть ли библиотека, которая может помочь мне реализовать это? Некоторые детали будут высоко оценены (например, за «Использование времени Joda» не будет присуждаться кредит).

Спасибо дон

Ответы на вопрос(3)

Ваш ответ на вопрос