Как получить диапазон месяцев из заданного диапазона дат - PullRequest
0 голосов
/ 28 сентября 2011

Например, если я даю начальную дату как 15 марта 2009 года и конечную дату как 15 марта 2010 года, я хочу получить диапазон дат, как указано ниже,

Start Date      End Date

15-mar-2009     15-Apr-2009
15-apr-2009     15-may-2009    
...
15-mar-2010     15-apr-2010

Может кто-нибудь, пожалуйста, помогите мне получить это.

1 Ответ

1 голос
/ 28 сентября 2011

Вы можете попробовать что-то вроде этого, иметь метод расширения (или метод без расширения), который возвращает IEnumerable<DateTime>, вы можете повторить это или использовать его в выражении linq и т. Д.

public static IEnumerable<DateTime> EnumerateUntilAfter(this DateTime startDate, DateTime endDate)
{
    if(endDate < startDate)
        throw new ArgumentOutOfRangeException("End date must be less than start date");
    return EnumerateUntilAfterImpl(startDate, endDate);
}

private static IEnumerable<DateTime> EnumerateUntilAfterImpl(DateTime startDate, DateTime endDate)
{
    while (startDate <= endDate)
    {
        yield return startDate;
        startDate = startDate.AddMonths(1);
    }
}

usedкак

public void DoTheThing(DateTime start, DateTime end)
{
    Console.WriteLine("StartDate\tEndDate");
    foreach (var date in start.EnumerateUntilAfter(end))
        Console.WriteLine("{0}\t{1}", date, date.AddMonths(1));
}

Дает вам

StartDate   EndDate
15-Mar-2009 15-Apr-2009
15-Apr-2009 15-May-2009
15-May-2009 15-Jun-2009
15-Jun-2009 15-Jul-2009
15-Jul-2009 15-Aug-2009
15-Aug-2009 15-Sep-2009
15-Sep-2009 15-Oct-2009
15-Oct-2009 15-Nov-2009
15-Nov-2009 15-Dec-2009
15-Dec-2009 15-Jan-2010
15-Jan-2010 15-Feb-2010
15-Feb-2010 15-Mar-2010
15-Mar-2010 15-Apr-2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...