#c# #asp.net #datetime
#c# #asp.net #дата и время
Вопрос:
В моей базе данных есть таблица напоминаний, в которой есть 2 столбца для хранения ActionDay и ReminderDay. Оба эти дня хранятся в виде целых чисел: 0 (вс) -> 6 (сб) для представления дней недели.
Когда я загружаю свою страницу, я хотел бы показать дату следующего дня действия и дату дня напоминания.
Я могу определить дату следующего дня действия, используя это:
public static class DateTimeExtensions
{
public static DateTime Next(this DateTime date, DayOfWeek weekday)
{
return (from i in Enumerable.Range(0, 7)
where date.AddDays(i).DayOfWeek == weekday
select date.AddDays(i)).First();
}
}
У меня возникли некоторые проблемы с вычислением предыдущей даты из ActionDay.
Например, (используя сегодняшнюю дату 26 октября 2011 года): если ActionDay равен ‘3’, а ReminderDay равен ‘2’, тогда я ожидаю ‘Ср, 26 октября’ для ActionDay и ‘Вт, 25 октября’ для ReminderDay.
Если ActionDay равен 0, а ReminderDay равен 6, я бы ожидал ‘Sun, 30 Oct’ и ‘Sat, 29 Oct’
Любые предложения о том, как я мог бы получить эту дату напоминания? Мне также было бы интересно узнать, есть ли какие-либо хорошие расширения / фрагменты c # datetime, поскольку, возможно, было бы проще подключить что-то, что кто-то еще протестировал, чем писать здесь свое собственное 🙂
Спасибо, Рич
Комментарии:
1. Вы изучали это: code.google.com/p/noda-time Это довольно мощная библиотека, которая может решить некоторые из ваших проблем.
2. Моим единственным советом было бы не использовать вычисления на основе 0 для метода, основанного на дате. Воскресенье должно быть 1 …. Суббота должна быть 7
3. Какая-либо конкретная причина для этого Ramhound?
Ответ №1:
Вы можете вычислить разницу между днем действия и днем напоминания, а затем вызвать AddDay()
функцию для даты и времени, представляющих день действия, чтобы получить дату и время для дня напоминания:
// here a stands for the number representing the action day, and r for the reminder day
// a and r are both integers from 0 to 6
int diff;
if (a >= r)
{
diff = a - r;
}
else
{
diff = a 7 - r;
}
DateTime reminderDateTime = actionDateTime.AddDays(-1 * diff);
Комментарии:
1. Спасибо за помощь, Андрей. Я подключил это к классу, и теперь он отлично работает 🙂