lógica de eventos recorrentes

Estou trabalhando em um aplicativo do tipo calendário do Groovy / Java que permite ao usuário inserir eventos com uma data de início e uma recorrência opcional. Se for um evento recorrente, pode ocorrer novamente:

mensalmente em uma data do mês que corresponde à data de iníciosemanalmente em um dia da semana que corresponde à data de inícioa cada 2 semanas em um dia da semana corresponde à data de inícioetc.

Inicialmente, planejei usar a API de calendário do Google para fazer toda a lógica de recorrência, mas ela provou ser uma PITA enorme, por razões que discutirei mais se alguém se importar.

Então, agora, eu decidi lançar minha própria solução. Dada uma data, quero descobrir se um evento recorrente ocorre nessa data. Minha lógica (em pseudocódigo) será a seguinte:

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

Essa lógica parece razoável, mas será realmente um grande esforço de implementação quando você considerar todos os casos extremos estranhos (por exemplo, como lidar com um evento recorrente mensal em fevereiro cuja primeira ocorrência é 31 de janeiro).

Existe uma biblioteca que pode me ajudar a implementar isso? Algumas especificidades seriam muito apreciadas (por exemplo, nenhum crédito será concedido por "Use Joda Time").

Obrigado Don

questionAnswers(3)

yourAnswerToTheQuestion