Tôi đang làm việc trên ứng dụng loại lịch Groovy/Java cho phép người dùng nhập các sự kiện có ngày bắt đầu và lặp lại tùy chọn. Nếu đó là một sự kiện lặp đi lặp lại, nó có thể recurr:logic sự kiện định kỳ
- hàng tháng vào một ngày của tháng tương ứng với ngày bắt đầu
- hàng tuần vào một ngày trong tuần của tương ứng với ngày bắt đầu
- mỗi 2 tuần vào một ngày trong tuần của tương ứng với ngày bắt đầu
- , vv
tôi dự kiến ban đầu về cách sử dụng API của Google lịch để làm tất cả các logic tái phát, nhưng nó được chứng minh là một Pita khổng lồ , vì lý do Tôi sẽ thảo luận thêm nếu có ai quan tâm.
Vì vậy, bây giờ, tôi đã quyết định cuộn giải pháp của riêng mình. Cho một ngày, tôi muốn tìm hiểu xem một sự kiện lặp lại xảy ra vào ngày này hay không. Logic của tôi (trong giả) sẽ như sau:
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
}
}
Logic này có vẻ hợp lý, nhưng thực tế sẽ được khá nhiều công sức để thực hiện khi bạn xem xét tất cả các trường hợp cạnh lạ (ví dụ như làm thế nào để xử lý một định kỳ hàng tháng sự kiện vào tháng 2 có lần xuất hiện đầu tiên là ngày 31 tháng 1).
Có thư viện nào có thể giúp tôi triển khai tính năng này không? Một số chi tiết cụ thể sẽ được đánh giá cao (ví dụ: không có tín dụng nào sẽ được trao cho "Sử dụng Thời gian Joda").
Cảm ơn, Don
câu hỏi tương tự: [Whats tốt nhất ngày java tái phát mẫu máy tính] (http://stackoverflow.com/q/492055/642706) –
giấy Martin Fowler này, [sự kiện lặp lại cho Lịch] (http://martinfowler.com/apsupp/recurring.pdf) có thể hữu ích. –