Я думаю, что как много вещей, это - анализ рентабельности. Вы можете программа в предпринятом восстановлении после malloc () отказ - хотя это может быть трудно (Ваш обработчик не должен ссориться с той же нехваткой памяти, это предназначено для контакта с).
Вы уже отметили, что самый общий случай должен вымыться и перестать работать корректно. В этом случае было решено, чтобы стоимость прерывания корректно была ниже, чем комбинация затрат на разработку и стоимости производительности в восстановлении.
я уверен, что можно думать собственных примерах о ситуациях, где завершение программы является очень дорогой опцией (аппарат жизнеобеспечения, управление космическим кораблем, продолжительное и строго ограниченное во времени финансовое вычисление и т.д.) - хотя первый оборонительный рубеж должен, конечно, гарантировать, что программа имеет предсказуемое использование памяти и что среда может предоставить это.
Совершенно непонятно, что вы имеете в виду под "больше, чем startHour" ... но взятие
TimeSpan startHour = new TimeSpan(12, 25, 43);
if (endHour.TimeOfDay > startHour)
{
...
}
... работает довольно просто.
Безусловно, добавьте проверку аргументов в убедитесь, что вы не указали значение для startHour, равное <
0 или >
23 часа, но это все довольно просто.
API даты и времени .NET вполне достаточно примитивный (даже в 3.5) по сравнению, скажем, с Joda Time - но в данном конкретном случае я думаю, что это не так уж и плохо.
Небольшая подсказка - .NET поддерживает арифметические операции с объектами DateTime и возвращает объект TimeSpan. Таким образом, вы можете сделать следующее:
DateTime fromDate = ....
DateTime toDate = ....
TimeSpan diff = toDate - fromDate;
, и вы можете расширить это до:
DateTime fromDate = DateTime.Now;
DateTime toDate = DateTime.Now.addMinutes(x);
if ((toDate - fromDate).TotalMinutes > 15) {
...
}
Итак, вас интересует только компонент времени даты.
if(DateTime.Now.TimeOfDay > startHour.TimeOfDay)
{
// do stuff
}
Что плохого в этом?
Вы должны использовать TimeSpan для startHour и endHour. При сравнении с текущим моментом вы должны «преобразовать» их в полное DateTime или получить время с помощью DateTime.TimeOfDay, как упомянул Джон Скит.
TimeSpan startHour = new TimeSpan(12, 25, 43);
DateTime now = DateTime.Now;
if (now.CompareTo(DateTime.Today.Add(startHour)) > 0) {
//...
}
или
TimeSpan startHour = new TimeSpan(12, 25, 43);
DateTime now = DateTime.Now;
if (now.TimeOfDay.CompareTo(startHour) > 0) {
//...
}