2014-10-08 6 views
0

как часть проекта, я пытаюсь создать календарь в Asp.net исключительно из кода с помощью C# Я использую ретранслятор и заполняю его содержимым из кода, который является работающ отлично. Я могу использовать Datetime, чтобы получить сегодняшний день месяца и т. Д.Календарь Asp.net - Создание дат

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

В настоящее время я создаю даты для конкретных дней.

if (today == "Monday" || today.Equals("Monday")) 
      { 
      switch (days) 
       { 
        case "0": 
         return DateTime.Today.AddDays(0).ToString("dd"); 
        case "1": 
         return DateTime.Today.AddDays(1).ToString("dd"); 
        case "2": 
         return DateTime.Today.AddDays(2).ToString("dd"); 
        case "3": 
         return DateTime.Today.AddDays(3).ToString("dd"); 
        case "4": 
         return DateTime.Today.AddDays(4).ToString("dd"); 
        case "5": 
         return DateTime.Today.AddDays(5).ToString("dd"); 
        case "6": 
         return DateTime.Today.AddDays(6).ToString("dd"); 
        default: 
         return "error"; 
       } 
      } 

А потом на вторник

else if (today == "Tuesday" || today.Equals("Tuesday")) 
      { 
       switch (days) 
       { 
        case "0": 
         return DateTime.Today.AddDays(-1).ToString("dd"); 
        case "1": 
         return DateTime.Today.AddDays(0).ToString("dd"); 
        case "2": 
         return DateTime.Today.AddDays(1).ToString("dd"); 
        case "3": 
         return DateTime.Today.AddDays(2).ToString("dd"); 
        case "4": 
         return DateTime.Today.AddDays(3).ToString("dd"); 
        case "5": 
         return DateTime.Today.AddDays(4).ToString("dd"); 
        case "6": 
         return DateTime.Today.AddDays(5).ToString("dd"); 
        default: 
         return "error"; 
       } 
      } 

Так в примере вторника, в случае «0» в понедельник и, следовательно, если это вторник я вычесть 1 день от текущей даты, чтобы получить дату накануне. Код работает отлично, но я не могу не думать о том, что должен быть лучший способ.

И я должен создать этот кусок кода для повседневной недели, и единственное, что действительно меняется, - это целое число внутри " AddDays() "

также обратите внимание на причину переключения, заключается в том, что все операторы if вызываются в цикле for, следовательно, нечетные случаи в коммутаторе.

Если у кого-то умнее меня есть более простой способ выполнить это, пожалуйста, не стесняйтесь, дайте мне знать.

  • С наилучшими пожеланиями Андреас Халд.

ответ

0

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

return DateTime.Today.AddDays(days + todayDateTime.DayOfWeek).ToString("dd"); 

Затем вы можете контролировать следующий и предыдущий день с помощью переменной «days», равной 1 или -1. Имеет ли смысл?

+0

Правильно, да, извините, если я не уточнил это достаточно. переменная days - это просто переменная-счетчик в цикле for, в которую я не включал, разные случаи в коммутаторе - это не количество дней, которые нужно переместить вперед или назад, это представление дня, в котором нужна дата , Теперь я понимаю, что это, вероятно, глупо названо –

+0

Итак, в этом случае вы можете изменить свой код на: days + (DayOfWeek.Monday - todayDateTime.DayOfWeek) // в случае дней = 0 и в понедельник todayDateTime.DayOfWeek -> 1, который возвращает 0 + 1-1 = 0 дней + (DayOfWeek.Monday - todayDateTime.DayOfWeek) // в случае дней = 1 и понедельник todayDateTime.DayOfWeek -> 1, который возвращает 1 + 1-1 = 1 дней + (DayOfWeek .Monday - todayDateTime.DayOfWeek) // в случае дней = 0 и во вторник todayDateTime.DayOfWeek -> 2, который возвращает 0 + 1-2 = -1 дней + (DayOfWeek.Monday - todayDateTime.DayOfWeek) // в случае days = 1 и вторник todayDateTime.DayOfWeek -> 2, который возвращает 1 + 1-2 = 0 – Bonomi

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