在 C# 中使用 DateTime 计算事件的重复发生率

bee*_*bul 3 c# recurrence datetime

我有一组重复发生的事件。我需要能够计算出这些事件在接下来的 5 周左右发生的时间。

该系统将通知用户本月内将发生这些事件。

例如:

事件1

  • 开始日期= 2011 年 12 月 19 日星期一
  • 重复模式= 周一/每两周

事件2

  • 开始日期= 2012 年 2 月 3 日星期四
  • 重复模式= 星期四/每三周

现在是 3 月 22 日 - 在接下来的 5 周内,活动 1 和活动 2 将会在哪些日期举行。

能够检测是否是圣诞节也很有用,然后该事件将落到另一天。

我正在使用 .NET MVC2,但我想这是偶然的。

感谢您的帮助

tob*_*s86 5

像这样的事情应该可以解决问题:

//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;
}
Run Code Online (Sandbox Code Playgroud)

调用代码示例:

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);
});
Run Code Online (Sandbox Code Playgroud)