Дни обучения C # - PullRequest
       24

Дни обучения C #

0 голосов
/ 06 февраля 2009

Как я могу узнать в следующую среду, понедельник в неделю? Пример сегодня 06.02.2009 следующий понедельник 09.02.2009 или среда 11.02.2009 есть какой-нибудь алгоритм?

мне нужно:

какой день понедельник в ближайшие недели?

findDay ( "Понедельник")

должен вернуть 09.02.2009

=============================================== ======

findDay ( "вторник")

должен вернуть 10.02.2009

Ответы [ 5 ]

4 голосов
/ 06 февраля 2009
public static DateTime GetNextDayDate(DayOfWeek day) {
  DateTime now = DateTime.Now;
  int dayDiff = (int)(now.DayOfWeek - day);
  if (dayDiff <= 0) dayDiff += 7;
  return now.AddDays(dayDiff);
}
3 голосов
/ 06 февраля 2009
DateTime now = DateTime.Now;
DateTime nextMonday = now.AddDays((int)now.DayOfWeek - (int)DayOfWeek.Monday);

Гул, кажется, я ответил слишком быстро. На самом деле есть еще проверка, чтобы сделать. Посмотрите на ответы nobugz или peterchen.

1 голос
/ 28 февраля 2012

Я нашел более простое решение:

DayOfWeek - это перечисление: понедельник = 1, вторник = 2 и т. Д.

Итак, чтобы получить следующий понедельник (с сегодняшнего дня), вы должны использовать:

DateTime.Today.AddDays(8-(int)DateTime.Today.DayOfWeek)

где "8" - понедельник следующей недели (согласно enum-> 1 + 7).

Замените 8 на 10 (то есть в среду, 3 + 7), и вы получите среду на следующей неделе, и так далее ...

0 голосов
/ 06 февраля 2009

Просто итерируем немного:

DateTime baseDate = ...;
DayOfWeek requiredDayOfWeek = ...;

while(baseDate.DayOfWeek != requiredDayOfWeek)
    baseDate = baseDate.AddDays(1);

Вы также можете написать метод расширения, если таковой имеется:

static Next(this DateTime date, DayOfWeek requiredDayOfWeek) { ... }

и вы получите красивый синтаксис: today.Next(DayOfWeek.Saturday).

0 голосов
/ 06 февраля 2009

Как и Tyalis, но требуется дополнительная проверка:

int daysUntilMonday = ((int)DayOfWeek.Monday - (int)today.DayOfWeek;
if (daysUntilMonday <= 0) 
  daysUntilMonday += 7;

Monday = DateTime.Now.AddDays(daysUntilMonday);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...