Ответ 1
Это возможное решение:
yourDateTime.Date.AddHours(23).AddMinutes(59).AddSeconds(59);
Возможный дубликат:
Как указать последнее время дня с помощью DateTime
Мне нужно сравнить диапазон дат и отсутствующие строки, дата которых является верхней датой сравнения, но время выше полуночи. Есть ли способ установить верхнее время сравнения до 23:59:59?
Это возможное решение:
yourDateTime.Date.AddHours(23).AddMinutes(59).AddSeconds(59);
Почему бы вам не сравнить верхнее сравнение в полночь на следующий день после последнего, который вам интересен, а затем использовать это с эксклюзивным сравнением?
DateTime upperExclusive = lastInclusive.Date.AddDays(1);
if (dateInclusive >= date && date < upperExclusive)
{
....
}
Это похоже на более чистое решение, чем нахождение последней секунды дня - кроме всего остального вы все равно будете пропускать значения 23: 59: 59.500 и т.д. с вашей текущей схемой.
Обязательный штепсель: я не являюсь большим поклонником API даты и времени BCL. Вы можете оставить вкладки Noda Time - порт Joda Time в .NET.
Если вы делаете сравнение, почему бы вам не сравнить с меньшим, чем начало следующего дня?
Eg. если это был запрос Linq:
someList.Where(x => (currentDaysDate <= x.ItemDate ) && (x.ItemDate < nextDaysDate))
Создайте метод расширения EndOfDay
public static DateTime EndOfDay (this DateTime d)
{
return DateTime.Parse(d.ToShortDateString().Trim() + " 23:59:59");
}
Просто используйте один день позже, чем верхнее сравнение, и <
на верхней стороне вместо <=
. Таким образом, вы можете получить время, которое еще больше (доля секунды), чем тот, который вы указали.
В качестве альтернативы сравните, используя свойство DateTime.Date
, а не непосредственно DateTime. Это "отключит" временную часть, поэтому ваши даты в поиске будут автоматически обрабатываться как полночь.
Да, этот конструктор DateTime - http://msdn.microsoft.com/en-us/library/272ba130.aspx позволяет указать дату, а также часы, минуты и секунды.
Если вас вообще не беспокоит время, вы можете использовать свойство Date
DateTime
, которое возвращает только часть даты (с временем, установленным на 00: 00: 0000)
if(MyDate.Date >= StartDate.Date && MyDate.Date <= EndDate.Date)
{
//Code here
}