Рассчитать DateTime для предстоящего дня недели

Это код, который у меня есть на данный момент:

String getDayRequested;
public void setDay(String getDayFromForm1)
{
   getDayRequested = getDayFromForm1;
   {
      if (getDayRequested.Contains("today"))
      {
         getDayRequested = DateTime.Today.DayOfWeek.ToString();
      }
      else if (getDayRequested.Contains("tomorrow"))
      {
         getDayRequested = DateTime.Today.AddDays(1).DayOfWeek.ToString();
   }
}

Это проверяет мою строку TextBox.Text из Form1 и проверяет, есть ли в ней текст «сегодня» или «завтра».

Может ли кто-нибудь помочь мне в правильном направлении, как проверить строку на наличие информации, запрашиваемой о предстоящих днях; т.е.: «Какая дата будет в эту субботу», и добавьте соответствующее количество дней в зависимости от того, какой день, когда его спросят.

ОБНОВЛЕНИЕ

Используя код в принятом ответе, я использовал следующее в своем приведенном выше операторе else if, чтобы завершить то, что мне было нужно:

else if (getDayRequested.Contains("monday"))
{
   getDayRequested = GetFutureDay(DateTime.Now, DayOfWeek.Monday).ToString("dd");
}

person The Woo    schedule 05.12.2013    source источник
comment
Вы имеете в виду, что ваше текстовое поле будет иметь дату, которая будет в эту субботу, и вы должны вернуть дату, которая в субботу?   -  person V4Vendetta    schedule 05.12.2013
comment
@TheWoo Вам нужна дополнительная информация? Как эти ответы сработали для вас?   -  person crthompson    schedule 05.12.2013
comment
Должно быть более элегантное решение, чем использование Contains. Как выглядит getDayRequested?   -  person crthompson    schedule 06.12.2013


Ответы (2)


Этот удобный маленький метод вернет будущий день недели.

public DateTime GetFutureDay(DateTime start, DayOfWeek day)
{
    int daysToAdd = (day - start.DayOfWeek + 7) % 7;
    return start.AddDays(daysToAdd);
}

Это будет называться так:

var day = (DayOfWeek)Enum.Parse(typeof(DayOfWeek), getDayFromForm1);
var getDayRequested = GetFutureDay(DateTime.Now, day);
person crthompson    schedule 05.12.2013
comment
Вам не нужен кастинг (int). - person King King; 05.12.2013
comment
Это сработало отлично. Я обновил вопрос выше с кодом, который работал для него. Большое спасибо. - person The Woo; 06.12.2013

Рассмотрим следующий фрагмент кода...

DateTime date;
public void setDay(String day)
{
    DayOfWeek futureDay = (DayOfWeek)Enum.Parse(typeof(DayOfWeek), day);
    int futureDayValue = (int)futureDay;
    int currentDayValue = (int)DateTime.Now.DayOfWeek;
    int dayDiff = futureDayValue - currentDayValue;
    if (dayDiff > 0)
    {
        date = DateTime.Now.AddDays(dayDiff);
    }
    else
    {
        date = DateTime.Now.AddDays(dayDiff + 7);
    }


}

Удачи!

person gpmurthy    schedule 05.12.2013