/// <summary> /// Update `BeginningTime` accroding to `RecurringFrequency`. /// </summary> /// <returns>Boolean value indicating whether `BeginningTime` is up to date or not.</returns> public virtual bool UpdateBeginningTime() { if (RecurringFrequency == RecurringFrequencies.None) { return(false); } if (BeginningTime > DateTime.Now) { return(true); // BeginningTime is up-to-date. } // assume that `dt` is today, check whether it has been expired or not. (if it is expired: starts from next day) DateTime beginningDateTime = BeginningTime.AddDays((DateTime.Today.Date - BeginningTime.Date).Days); // Compare time part of the day only DayOfWeek targetWeekday = (BeginningTime.TimeOfDay <= DateTime.Now.TimeOfDay) ? DateTime.Now.DayOfWeek + 1 : DateTime.Now.DayOfWeek; Weekday nextRecurringWeekday = Utils.GetNextRecurringWeekday(targetWeekday, RecurringFrequency); if (nextRecurringWeekday.ToSystemWeekday() == DateTime.Today.DayOfWeek) { BeginningTime = DateTime.Today.Date.Add(BeginningTime.TimeOfDay); } else { BeginningTime = Utils.DateTimeOfNextWeekday(beginningDateTime, nextRecurringWeekday.ToSystemWeekday()); } return(true); }