как часть проекта, я пытаюсь создать календарь в 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, следовательно, нечетные случаи в коммутаторе.
Если у кого-то умнее меня есть более простой способ выполнить это, пожалуйста, не стесняйтесь, дайте мне знать.
- С наилучшими пожеланиями Андреас Халд.
Правильно, да, извините, если я не уточнил это достаточно. переменная days - это просто переменная-счетчик в цикле for, в которую я не включал, разные случаи в коммутаторе - это не количество дней, которые нужно переместить вперед или назад, это представление дня, в котором нужна дата , Теперь я понимаю, что это, вероятно, глупо названо –
Итак, в этом случае вы можете изменить свой код на: 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