Подтвердить что ты не робот

Как получить дату следующего воскресенья?

Возможный дубликат:
ASP.net получит следующий вторник

Учитывая день месяца, как я могу получить следующее воскресенье с этого дня?

Итак, если я перейду во вторник 13 сентября 2011 года, он вернется 18 сентября.

4b9b3361

Ответ 1

Я использую этот метод расширения:

    public static DateTime Next(this DateTime from, DayOfWeek dayOfWeek)
    {
        int start = (int)from.DayOfWeek;
        int target = (int)dayOfWeek;
        if (target <= start)
            target += 7;
        return from.AddDays(target - start);
    }

Ответ 2

date.AddDays(7 - (int)date.DayOfWeek) должен сделать это, я думаю.

date.DayOfWeek вернет значение перечисления, которое представляет день (где 0 - воскресенье).

Ответ 3

        var date = DateTime.Now;
        var nextSunday = date.AddDays(7 - (int) date.DayOfWeek);    

Если вам нужно ближайшее воскресенье, код немного отличается (как будто вы в воскресенье, ближайшее воскресенье - сегодня):

var nearestSunday = date.AddDays(7 - date.DayOfWeek == DayOfWeek.Sunday ? 7 : date.DayOfWeek);

Ответ 4

/// <summary>
/// Finds the next date whose day of the week equals the specified day of the week.
/// </summary>
/// <param name="startDate">
/// The date to begin the search.
/// </param>
/// <param name="desiredDay">
/// The desired day of the week whose date will be returneed.
/// </param>
/// <returns>
/// The returned date is on the given day of this week.
/// If the given day is before given date, the date for the
/// following week desired day is returned.
/// </returns>
public static DateTime GetNextDateForDay( DateTime startDate, DayOfWeek desiredDay )
{
    // (There has to be a better way to do this, perhaps mathematically.)
    // Traverse this week
    DateTime nextDate = startDate;
    while( nextDate.DayOfWeek != desiredDay )
        nextDate = nextDate.AddDays( 1D );

    return nextDate;
}

Источник:

http://angstrey.com/index.php/2009/04/25/finding-the-next-date-for-day-of-week/

Ответ 5

Здесь код:

int dayOfWeek = (int) DateTime.Now.DayOfWeek;
DateTime nextSunday = DateTime.Now.AddDays(7 - dayOfWeek).Date;

Сначала введите числовое значение дня недели, в вашем примере: вторник = 2

Затем вычтите его из воскресенья, 7 -2 = 5 дней, чтобы добавить его, чтобы получить следующую воскресную дату.:)

Ответ 6

DateTime dt=dateTime;
do {
  dt=dt.AddDays(1);
} while(dt.DayOfWeek!= DayOfWeek.Sunday);
// 'dt' is now the next Sunday

В вашем вопросе не ясно, возвращается ли эта же дата, если дата уже является воскресенью; Я предполагаю, что нет, но измените приведенный выше цикл while, если я ошибаюсь.

Ответ 7

Пример использования рекурсии

    private static DateTime GetNextSunday(DateTime dt)
    {
        var tomorrow = dt.AddDays(1);
        if (tomorrow.DayOfWeek != DayOfWeek.Sunday)
        {
            GetNextSunday(tomorrow);
        }

        return tomorrow;
    }

Ответ 8

public static DateTime GetNextSunday (DateTime date)
{
     if (date.DayOfWeek == DayOfWeek.Sunday)
          date = date.AddDays(1);
     while (date.DayOfWeek != DayOfWeek.Sunday)
          date = date.AddDays(1);

     return date;
}