2015-08-23 5 views
1

Язык: VB.NET или C# пожалуйста!VB.NET Сравните даты, дни, недели, чтобы создать новую переменную datetime

Я пытаюсь применить правило, чтобы определить конкретную дату и терпеть неудачу.

Клиент выбирает день (переключатель): Пн, Вт, Ср, Чт, Пт, Сб, Вс.

Мне нужно создать переменную DateTime DateOnDate, которая основана на том, какой день был выбран, и сравнить его с текущей датой. Применение этих основных правил:

  1. Если день текущей даты является < = дата дня выбран, а затем использовать эту дату недели для (радио-кнопки) дня выбрано.
  2. Если день текущей даты - дата дня, выберите следующую дату недели для выбранного дня (переключатель).

Я все еще очень смущен, как подойти к этому и, вероятно, не очень хорошо описывать вещи. Вот попытка установить некоторые примеры:

Сценарий № 1:
- значение = четверг
(радио-кнопка) -Current Date = 8/17/2015 (понедельник)
-SendOnDate должно быть: 8/20/2015 (четверг недели текущего Дейта)

Сценарий № 2:
- значение (кнопка радио) = понедельник
-Current Date = 8/19/2015 (среда)
-SendOnDate должно быть: 8/24/2015 (понедельник текущей даты на следующей неделе)

Сценарий № 3:
- значение (кнопка радио) = среда
-Current Date = 8/19/2015 (среда)
-SendOnDate должно быть: 8/19/2015 (среда недели текущего Дейта)

Я не совсем уверен, как наилучшим образом подойти к этому и установить значение SendOnDate.

+0

Не важно, на какой неделе он находится, не так ли? В любом случае вы хотите выбрать следующее Солнце или Пт или что угодно. Пока это будущая дата (завтра +), то это дата. – Plutonix

+0

Неважно, на какой неделе! Мне нужно построить это значение «SendOnDate» Date на основе приведенной выше логики. Я, вероятно, не очень хорошо объясняю. Если день текущей даты еще не произошел на неделе текущей даты, создайте значение SendOnDate = до дня, выбранного для этой недели. Если день текущей даты уже произошел в течение недели, используйте следующий день недели. – user2309282

+1

По крайней мере, с базовым типом DateTime, который вы не можете указать *, на какой неделе он находится, поэтому вы сбиваете с толку это правило. Во всех случаях вы хотите использовать сегодня (S # 3) или дату следующего выбранного дня (S # 1,2). A Для цикла N, проходящего через сегодня, и следующие 6 дней найдут следующую дату сопоставления (с выходом «Выход», когда она будет соответствовать) – Plutonix

ответ

1

Я думаю, вы сбиваете с толку аспект week; во всех случаях, упомянутых либо сегодня, либо один из следующих 6 дней будет соответствовать.

Private Function GetNextDay(dow As DayOfWeek) As DateTime 
    Dim dtRet As DateTime = DateTime.Now 

    ' one of today or next 6 days will match 
    For n As Integer = 0 To 6 
     dtRet = DateTime.Now.AddDays(n) 
     If dtRet.DayOfWeek = dow Then 
      Exit For 
     End If 
    Next 

    Return dtRet 
End Function 

Тест:

Console.WriteLine("Today is {0}", DateTime.Now.ToShortDateString) 
Dim pickedDay = DayOfWeek.Sunday 
Console.WriteLine("For {0}, the schedule is {1}", pickedDay.ToString, 
        GetNextDay(pickedDay).ToShortDateString) 

pickedDay = DayOfWeek.Wednesday 
Console.WriteLine("For {0}, the schedule is {1}", pickedDay.ToString, 
        GetNextDay(pickedDay).ToShortDateString) 

pickedDay = DayOfWeek.Saturday 
Console.WriteLine("For {0}, the schedule is {1}", pickedDay.ToString, 
        GetNextDay(pickedDay).ToShortDateString) 

Выход:

Сегодня 8/23/2015
В воскресенье, расписание 8/23/2015
В среду, график - 26.08.2012
В субботу, график - 28.08.2012

Первый удовлетворяет сценарию 1, где сегодня имеет право, остальные 2 просто выбирают предстоящий Date, где находятся совпадения DayOfWeek. В тех случаях, когда определенные дни, такие как праздники, не ограничиваются, вам нужно составить список этих и пропустить день или неделю.

Примечание: GetNextDay возвращает переменную DateTime, код просто не фиксирует ее для переменной.

+0

ahhhhh .... спасибо, что вы мне что-то видели. Я попытаюсь реализовать это как можно скорее! – user2309282

Смежные вопросы