Я работаю над приложением типа календаря Groovy/Java, которое позволяет пользователю вводить события с датой начала и дополнительным повторением. Если это - повторяющееся событие, это может повторно ворковать:
Я первоначально запланировал использование API Google Календаря, чтобы сделать всю логику повторения, но это оказалось огромным ЛАВАШЕМ по причинам, которые я буду обсуждать далее, если кто-либо будет заботиться.
Таким образом, теперь я решил прокрутить свое собственное решение. Учитывая дату, я хочу выяснить, имеет ли повторяющееся событие место в эту дату. Моя логика (в псевдокоде) будет следующие:
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
}
}
Эта логика кажется разумной, но на самом деле будет довольно большим усилием реализовать, когда Вы рассматриваете все странные пограничные случаи (например, как обработать ежемесячное повторяющееся событие в феврале, первое вхождение которого является Jan 31).
Существует ли библиотека, которая может взять, помогают мне реализовать это? Некоторые специфические особенности очень ценились бы (например, никакой кредит не будет назначен за "Использование Временем Joda").
Спасибо, Дон