Here is the way I attempted this.
public class WeekTimeSpan
{
public WeekDayTime StartDayTime
{
get; set;
}
public WeekDayTime EndDayTime
{
get; set;
}
public bool DoesFallInTimeSpan (DateTime dateTime)
{
return StartDayTime.IsLessThan (dateTime) && EndDayTime.IsGreaterThan (dateTime);
}
}
public class WeekDayTime
{
public DayOfWeek DayOfWeek
{
get; set;
}
public int HourOfTheDay
{
get; set;
}
public int MinuteOfHour
{
get; set;
}
public bool IsGreaterThan (DateTime dateTime)
{
if (DayOfWeek > dateTime.DayOfWeek)
return true;
if (DayOfWeek < dateTime.DayOfWeek)
return false;
if (HourOfTheDay > dateTime.Hour)
return true;
if (HourOfTheDay < dateTime.Hour)
return false;
return MinuteOfHour > dateTime.Minute;
}
public bool IsLessThan (DateTime dateTime)
{
if (DayOfWeek < dateTime.DayOfWeek)
return true;
if (DayOfWeek > dateTime.DayOfWeek)
return false;
if (HourOfTheDay < dateTime.Hour)
return true;
if (HourOfTheDay > dateTime.Hour)
return false;
return MinuteOfHour < dateTime.Minute;
}
}
Here is the usage.
public bool CheckConditions (DateTime now)
{
List<WeekTimeSpan> timeSpans=new List<WeekTimeSpan>()
{
new WeekTimeSpan()
{
StartDayTime = new WeekDayTime() { DayOfWeek = DayOfWeek.Friday,HourOfTheDay = 18,MinuteOfHour = 0},
EndDayTime = new WeekDayTime() {DayOfWeek = DayOfWeek.Saturday,HourOfTheDay = 6,MinuteOfHour = 0}
}
};
return timeSpans.Exists (span => span.DoesFallInTimeSpan (now));
}
We got couple of data structures. WeekDayTime representing time in a week and WeekTimeSpan representing TimeSpan in a week. You have to extend WeekDayTime class if you are looking for more granular time like seconds and milliseconds.
Keep in my mind, this would fail for the very edge cases like Saturday to Sunday time span but would work for your scenario. I suggest to cover the edge cases before using it for production.
Please accept the response if it answers your question. Cheers!!