내 프로젝트에서 반복 이벤트에 대한 날짜를 계산해야합니다. 처음에는 시작일/시간과이 이벤트가 반복되어야하는 정보가 있습니다.C#에서 되풀이 날짜를 계산하는 올바른 방법
Every Day
Every Week
Every 2 Weeks
Every 3 Weeks
Every Month
Every 2 Months
...
어떻게해야할까요? 다른 시간대 및 요일 저장 설정으로 올바르게 작동해야합니다. 나는 단지 일/주/월을 로컬 DateTime에 추가 한 다음 UTC로 변환해야한다고 생각합니다. 하지만 이것에 대해서는 잘 모르겠습니다. 며칠을 추가하면 시계가 1 시간 앞으로 조정되어야 할 때가됩니다. 이 경우에는이 시간이 존재하지 않습니다. 다음은
은 내가 쓴 코드입니다,하지만 난이 모든 경우에 제대로 작동하는지 확실하지 않다 :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;
}
PS : 모든 날짜가 데이터베이스에서 UTC 형식으로 저장됩니다.
[NodaTime] (http://code.google.com/p/noda-time/) - 날짜 및 시간대 고유의 많은 문제점을 고려했습니다. – StuartLC