private DateTimeOffset? AdvanceToNextDayOfWeekIfNecessary(DateTimeOffset fireTime, bool forceToAdvanceNextDay)
{
// a. Advance or adjust to next dayOfWeek if need to first, starting next day with startTimeOfDay.
TimeOfDay startTimeOfDay = StartTimeOfDay;
DateTimeOffset fireTimeStartDate = startTimeOfDay.GetTimeOfDayForDate(fireTime).Value;
DateTimeOffset fireTimeStartDateCal = CreateCalendarTime(fireTimeStartDate);
DayOfWeek dayOfWeekOfFireTime = fireTimeStartDateCal.DayOfWeek;
// b2. We need to advance to another day if isAfterTimePassEndTimeOfDay is true, or dayOfWeek is not set.
ISet<DayOfWeek> daysOfWeek = DaysOfWeek;
if (forceToAdvanceNextDay || !daysOfWeek.Contains(dayOfWeekOfFireTime))
{
// Advance one day at a time until next available date.
for (int i = 1; i <= 7; i++)
{
fireTimeStartDateCal = fireTimeStartDateCal.AddDays(1);
dayOfWeekOfFireTime = fireTimeStartDateCal.DayOfWeek;
if (daysOfWeek.Contains(dayOfWeekOfFireTime))
{
fireTime = fireTimeStartDateCal;
break;
}
}
}
// Check fireTime not pass the endTime
DateTimeOffset? endTime = EndTimeUtc;
if (endTime != null && fireTime > endTime.Value)
{
return null;
}
return fireTime;
}