मैं एक ग्रोवी/जावा कैलेंडर-प्रकार एप्लिकेशन पर काम कर रहा हूं जो उपयोगकर्ता को प्रारंभ तिथि और वैकल्पिक पुनरावृत्ति के साथ ईवेंट दर्ज करने की अनुमति देता है। यदि यह एक आवर्ती घटना है, यह recurr हो सकता है:पुनरावर्ती घटना तर्क
महीने की एक तारीख है कि आरंभ तिथि करने के लिए इस बात का सप्ताह के एक दिन पर- मासिक आरंभ तिथि से मेल खाती है
- हर इस बात का सप्ताह के एक दिन पर 2 सप्ताह आरंभ तिथि
- आदि से मेल खाती है
मैं मूल रूप से गूगल कैलेंडर एपीआई का उपयोग कर सभी पुनरावृत्ति तर्क करने के लिए योजना बनाई है, लेकिन यह एक बहुत बड़ा 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 जनवरी है)।
क्या ऐसी कोई पुस्तकालय है जो इसे लागू करने में मेरी सहायता कर सकती है? कुछ विनिर्देशों की बहुत सराहना की जाएगी (उदाहरण के लिए "जोडा समय का उपयोग करें" के लिए कोई क्रेडिट नहीं दिया जाएगा)।
धन्यवाद, डॉन
इसी प्रकार के प्रश्न: [क्या सबसे अच्छा जावा तारीख पुनरावृत्ति पैटर्न कैलकुलेटर] (http://stackoverflow.com/q/492055/642706) –
इस मार्टिन Fowler कागज, [कैलेंडर के लिए घटनाक्रम आवर्ती] (http://martinfowler.com/apsupp/recurring.pdf) उपयोगी हो सकता है। –