में पुनरावर्ती तिथियों की गणना करने का सही तरीका मेरी परियोजना में मुझे घटनाओं को दोहराने के लिए तिथियों की गणना करने की आवश्यकता है।सी #
Every Day
Every Week
Every 2 Weeks
Every 3 Weeks
Every Month
Every 2 Months
...
यह करने के लिए सही तरीका क्या है: शुरुआत में मैं सिर्फ एक शुरुआत दिनांक/समय और जानकारी कैसे इस घटना को दोहराना चाहिए? यह अलग-अलग समय क्षेत्रों और दिन की बचत समय सेटिंग के साथ सही ढंग से काम करना चाहिए। मुझे लगता है कि मुझे स्थानीय डेटटाइम में केवल दिन/सप्ताह/महीने जोड़ना चाहिए और फिर इसे यूटीसी में परिवर्तित करना चाहिए। लेकिन मुझे इसके बारे में निश्चित नहीं है। क्या होता है यदि मैं कुछ दिन जोड़ता हूं और यह वह समय होगा जब हमें अपने घड़ियों को एक घंटे आगे समायोजित करने की आवश्यकता होगी। इस मामले में इस बार मौजूद नहीं होगा।
नीचे कोड मैंने लिखा है, लेकिन मुझे यकीन है कि यह हर मामले में सही ढंग से काम करता है नहीं कर रहा हूँ:
private static List<DateTime> FindOccurrences(DateTime localStart, Repeat repeat, int occurrences)
{
var result = new List<DateTime> { localStart };
switch (repeat)
{
case Repeat.Daily:
for (int i = 1; i <= occurrences; i++)
result.Add(localStart.AddDays(i));
break;
case Repeat.Every2Weeks:
for (int i = 1; i <= occurrences; i++)
result.Add(localStart.AddDays((7 * 2) * i));
break;
...
}
return result;
}
public List<Event> CreateRepeating(string timeZone, Repeat repeat, int repeatEnds, DateTime localStart, int eventDuration)
{
var events = new List<Event>();
var occurrences = FindOccurrences(localStart, repeat, repeatEnds);
foreach (var occurrence in occurrences)
{
var item = new Event();
item.Start = occurrence.ToUtcTime(timeZone);
item.End = occurrence.ToUtcTime(timeZone).AddMinutes(eventDuration);
events.Add(item);
}
return events;
}
पुनश्च: सभी तिथियों डेटाबेस में UTC स्वरूप में संग्रहीत हैं।
[नोडटाइम] (http://code.google.com/p/noda-time/) पर एक नज़र डालें - इसने दिनांक और समय क्षेत्र में निहित कई चुनौतियों को माना है। – StuartLC