1

再発する一連のイベントがあります。これらのイベントが今後5週間ほどでいつ発生するかを計算できる必要があります。

このシステムは、今月中にこれらのイベントが発生することをユーザーに通知します。

例えば:

イベント1

  • 開始日=2011年12月19日月曜日
  • 再発パターン=月曜日/隔週

イベント2

  • 開始日=2012年2月3日木曜日
  • 再発パターン=木曜日/3週間ごと

今は3月22日です。今後5週間以内に、イベント1と2の日程が決まります。

それがクリスマスであるかどうかを検出できると便利です。そうすれば、イベントは別の日になります。

私は.NETMVC2を使用していますが、それは偶然だと思います。

助けてくれてありがとう

4

2 に答える 2

3

このような何かがトリックを行う必要があります:

//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);
});
于 2012-03-22T11:50:56.677 に答える
2

おそらく次の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);
}
于 2012-03-22T11:41:07.860 に答える