/** * Returns a list of applicable dates corresponding to the specified week day in accordance with the frequency * specified by this recurrence rule. * @param date * @param weekDay * @return */ private List<DateTime> GetAbsWeekDays(DateTime date, IWeekDay weekDay, IRecurrencePattern pattern, bool? expand) { List<DateTime> days = new List<DateTime>(); DayOfWeek dayOfWeek = weekDay.DayOfWeek; if (pattern.Frequency == FrequencyType.Daily) { if (date.DayOfWeek == dayOfWeek) days.Add(date); } else if (pattern.Frequency == FrequencyType.Weekly || pattern.ByWeekNo.Count > 0) { int weekNo = Calendar.GetWeekOfYear(date, CalendarWeekRule.FirstFourDayWeek, pattern.FirstDayOfWeek); // construct a list of possible week days.. while (date.DayOfWeek != dayOfWeek) date = date.AddDays(1); while (Calendar.GetWeekOfYear(date, CalendarWeekRule.FirstFourDayWeek, pattern.FirstDayOfWeek) == weekNo) { days.Add(date); date = date.AddDays(7); } } else if (pattern.Frequency == FrequencyType.Monthly || pattern.ByMonth.Count > 0) { int month = date.Month; // construct a list of possible month days.. date = date.AddDays(-date.Day + 1); while (date.DayOfWeek != dayOfWeek) date = date.AddDays(1); while (date.Month == month) { days.Add(date); date = date.AddDays(7); } } else if (pattern.Frequency == FrequencyType.Yearly) { int year = date.Year; // construct a list of possible year days.. date = date.AddDays(-date.DayOfYear + 1); while (date.DayOfWeek != dayOfWeek) date = date.AddDays(1); while (date.Year == year) { days.Add(date); date = date.AddDays(7); } } return GetOffsetDates(days, weekDay.Offset); }
/** * Returns a list of applicable dates corresponding to the specified week day in accordance with the frequency * specified by this recurrence rule. * @param date * @param weekDay * @return */ private List<DateTime> GetAbsWeekDays(DateTime date, IWeekDay weekDay, IRecurrencePattern pattern, bool? expand) { List<DateTime> days = new List<DateTime>(); DayOfWeek dayOfWeek = weekDay.DayOfWeek; if (pattern.Frequency == FrequencyType.Daily) { if (date.DayOfWeek == dayOfWeek) days.Add(date); } else if (pattern.Frequency == FrequencyType.Weekly || pattern.ByWeekNo.Count > 0) { // Rewind to the first day of the week while (date.DayOfWeek != pattern.FirstDayOfWeek) date = date.AddDays(-1); // Step forward until we're on the day of week we're interested in while (date.DayOfWeek != dayOfWeek) date = date.AddDays(1); days.Add(date); } else if (pattern.Frequency == FrequencyType.Monthly || pattern.ByMonth.Count > 0) { int month = date.Month; // construct a list of possible month days.. date = date.AddDays(-date.Day + 1); while (date.DayOfWeek != dayOfWeek) date = date.AddDays(1); while (date.Month == month) { days.Add(date); date = date.AddDays(7); } } else if (pattern.Frequency == FrequencyType.Yearly) { int year = date.Year; // construct a list of possible year days.. date = date.AddDays(-date.DayOfYear + 1); while (date.DayOfWeek != dayOfWeek) date = date.AddDays(1); while (date.Year == year) { days.Add(date); date = date.AddDays(7); } } return GetOffsetDates(days, weekDay.Offset); }
/** * Returns a list of applicable dates corresponding to the specified week day in accordance with the frequency * specified by this recurrence rule. * @param date * @param weekDay * @return */ private List <DateTime> GetAbsWeekDays(DateTime date, IWeekDay weekDay, IRecurrencePattern pattern, bool?expand) { List <DateTime> days = new List <DateTime>(); DayOfWeek dayOfWeek = weekDay.DayOfWeek; if (pattern.Frequency == FrequencyType.Daily) { if (date.DayOfWeek == dayOfWeek) { days.Add(date); } } else if (pattern.Frequency == FrequencyType.Weekly || pattern.ByWeekNo.Count > 0) { // Rewind to the first day of the week while (date.DayOfWeek != pattern.FirstDayOfWeek) { date = date.AddDays(-1); } // Step forward until we're on the day of week we're interested in while (date.DayOfWeek != dayOfWeek) { date = date.AddDays(1); } days.Add(date); } else if (pattern.Frequency == FrequencyType.Monthly || pattern.ByMonth.Count > 0) { int month = date.Month; // construct a list of possible month days.. date = date.AddDays(-date.Day + 1); while (date.DayOfWeek != dayOfWeek) { date = date.AddDays(1); } while (date.Month == month) { days.Add(date); date = date.AddDays(7); } } else if (pattern.Frequency == FrequencyType.Yearly) { int year = date.Year; // construct a list of possible year days.. date = date.AddDays(-date.DayOfYear + 1); while (date.DayOfWeek != dayOfWeek) { date = date.AddDays(1); } while (date.Year == year) { days.Add(date); date = date.AddDays(7); } } return(GetOffsetDates(days, weekDay.Offset)); }