C# 在C中使用DateTime计算事件的重复性#

C# 在C中使用DateTime计算事件的重复性#,c#,datetime,recurrence,C#,Datetime,Recurrence,我有一系列事件再次发生。我需要能够计算这些事件在未来5周左右发生的时间 此系统将通知用户,这些事件将在本月内发生 例如: 事件1 开始日期=2011年12月19日星期一 重复模式=周一/两周 事件2 开始日期=2012年2月3日星期四 复发模式=周四/每三周 现在是3月22日——在接下来的5周内,活动1和2将在哪一天举行 如果能够检测到是否是圣诞节,那么这一事件将在另一天发生,这将是非常有用的 我正在使用.NETMVC2,但我想这是偶然的 感谢您的帮助您可能只需要使用DateTime.A

我有一系列事件再次发生。我需要能够计算这些事件在未来5周左右发生的时间

此系统将通知用户,这些事件将在本月内发生

例如:

事件1

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

  • 开始日期=2012年2月3日星期四
  • 复发模式=周四/每三周
现在是3月22日——在接下来的5周内,活动1和2将在哪一天举行

如果能够检测到是否是圣诞节,那么这一事件将在另一天发生,这将是非常有用的

我正在使用.NETMVC2,但我想这是偶然的


感谢您的帮助

您可能只需要使用
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);
}
var-date=新的日期时间(2011,12,19);
var end=新的日期时间(2012,4,26);//五周后
while(日期<结束)
{
如果(日期>日期时间.现在)
{
//这是你想要的约会
}
日期=日期加天数(14);
}

您可能只需要使用
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);
}
var-date=新的日期时间(2011,12,19);
var end=新的日期时间(2012,4,26);//五周后
while(日期<结束)
{
如果(日期>日期时间.现在)
{
//这是你想要的约会
}
日期=日期加天数(14);
}

像这样的东西应该可以做到:

//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;
}

像这样的事情应该可以做到:

//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;
}

我已经编辑了我的原始帖子,只是要提到重复模式是多种多样的。。有没有一种方法可以将各种模式结合起来?@beebul:见编辑后的答案。如果你想添加更多的模式,你必须修改枚举和相关逻辑。谢谢,我会尝试一下,并向你汇报:)我如何添加循环所需的事件开始日期?@beebul:请参阅我答案底部的示例。你只需将其传递到方法中。我编辑了我的原始帖子,只是为了说明重复模式是多种多样的。。有没有一种方法可以将各种模式结合起来?@beebul:见编辑后的答案。如果你想添加更多的模式,你必须修改枚举和相关逻辑。谢谢,我会尝试一下,并向你汇报:)我如何添加循环所需的事件开始日期?@beebul:请参阅我答案底部的示例。您只需将其传递到方法中。这是一个非常常见的主题。。。这是一个非常普遍的主题。。。