Получить DateTime для n-го воскресенья после сегодняшнего дня - PullRequest
2 голосов
/ 10 мая 2011

Для получения номера текущей недели я использую следующее:

var weekNo = CultureInfo.CurrentCulture.Calendar.GetWeekOfYear(DateTime.UtcNow,
                                                  CalendarWeekRule.FirstFullWeek,
                                                  DayOfWeek.Sunday);

И я хочу вернуть DateTime, представляющий первый день n-й недели после сегодняшнего дня.

например. когда n = 2, я бы хотел, чтобы DateTime представляло воскресенье после следующего.

Есть ли способ сделать это в C #?

Ответы [ 4 ]

4 голосов
/ 10 мая 2011

Вы можете использовать:

DateTime sundayInFuture = DateTime.Today.AddDays((n - 1) * 7 + (7 - (int)DateTime.Today.DayOfWeek));

Это должно сработать (хотя у меня нет доступа ни к чему, чтобы проверить это!).

Редактировать: Благодаря комментариям.

3 голосов
/ 10 мая 2011

Это должно работать:

int n = 2;
DateTime today = DateTime.Today;
int daysToNextSunday = (7 - today.DayOfWeek - DayOfWeek.Sunday) ;
DateTime nthSunday = today.AddDays((n - 1) * 7 + daysToNextSunday);
1 голос
/ 10 мая 2011

Не могли бы вы добавить количество дней с этого момента до воскресенья, а затем добавить (n-1) * еще 7 дней?

0 голосов
/ 11 мая 2011

Обратите внимание, что Calendar.GetWeekOfYear не соответствует ISO 8601 .

Вот пример использования класса Week Библиотека периодов времени для .NET :

// ----------------------------------------------------------------------
public DateTime GetStartOfWeek( DateTime moment, int offset )
{
  return new Week( new Week( moment ).WeekOfYear + Math.Abs( offset ) ).FirstDayOfWeek;
} // GetStartOfWeek
...