Расчет повторяемости событий с использованием DateTime в C # - PullRequest
1 голос
/ 22 марта 2012

У меня есть множество событий, которые повторяются.Мне нужно иметь возможность рассчитать, когда эти события произойдут в ближайшие 5 недель или около того.

Эта система будет информировать пользователя о том, что в течение этого месяца произойдут эти события ..

Например:

Event1

  • Дата начала = Понедельник, 19 декабря 2011
  • Модель повторения = Понедельник / Две недели

Событие2

  • Дата начала = четверг, 3 февраля 2012
  • Модель повторения = Четверг / Каждые три недели

Сейчас 22 марта - в течение следующих 5 недель, на какие даты будут приходить События 1 и 2.

Было бы также полезно определить, является ли это Рождеством, тогда событие выпадет на другой день.

Я использую .NET MVC2, но, думаю, это случайно.

Спасибо за любую помощь

Ответы [ 2 ]

3 голосов
/ 22 марта 2012

Примерно так должно получиться:

//enum for various patterns
public enum OccurrenceRate
{
    Weekly,
    Fortnightly,
    Monthly
}

public static List<DateTime> GetOccurrences(DateTime startDate, DateTime endDate, OccurrenceRate rate)
{
    List<DateTime> occurrences = new List<DateTime>();

    var nextDate = startDate;

    while (true)
    {
        if (nextDate <= endDate)
        {
            occurrences.Add(nextDate);
        }
        else
        {
            break;
        }

        switch (rate)
        {
            case OccurrenceRate.Weekly:
            {
                nextDate = nextDate.AddDays(7);
                break;
            }
            case OccurrenceRate.Fortnightly:
            {
                nextDate = nextDate.AddDays(14);
                break;
            }
            case OccurrenceRate.Monthly:
            {
                nextDate = nextDate.AddMonths(1);
                break;
            }
        }
    }

    return occurrences;
}

Пример кода вызова:

DateTime startDate = DateTime.Now;
DateTime endDate = startDate.AddDays(35); //5 weeks

var dates = GetOccurrences(startDate, startDate.AddDays(35), OccurrenceRate.Weekly);
dates.ForEach(date =>
{
    Console.WriteLine("{0:yyyy-MM-dd}", date);
});
2 голосов
/ 22 марта 2012

Вы, вероятно, должны просто использовать метод DateTime.AddDays:

var date = new DateTime(2011, 12, 19);
var end = new DateTime(2012, 4, 26); // five weeks from now
while (date < end)
{
    if (date > DateTime.Now)
    {
        // This is a date you want
    }
    date = date.AddDays(14);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...