public static int CalculateNumberOfOccurences(DateTime startDate, DateTime lastInstanceStartDate, RecurrenceType recurrenceType, int period, int day) { startDate = DateTimeUtils.GetDayStart(startDate); lastInstanceStartDate = DateTimeUtils.GetDayStart(lastInstanceStartDate); if (recurrenceType == RecurrenceType.EveryNDays) { TimeSpan ts = lastInstanceStartDate - startDate; return(((int)ts.TotalDays) / period + 1); } else if (recurrenceType == RecurrenceType.EveryWeekday) { DaysOfWeekFlags weekdays = DateTimeHelper.Weekdays; return(CalculateNumberOfOccurencesInWeek(startDate, lastInstanceStartDate, period, weekdays)); } else if (recurrenceType == RecurrenceType.EveryNWeeks) { return(CalculateNumberOfOccurencesInWeek(startDate, lastInstanceStartDate, period, (DaysOfWeekFlags)day)); } else if (recurrenceType == RecurrenceType.EveryNMonths || recurrenceType == RecurrenceType.EveryNthDayOfEveryNMonths) { int numberOfMonths = DateTimeHelper.GetMonthSpan(startDate, lastInstanceStartDate); return(numberOfMonths / period + 1); // extra day } else { int numberOfYears = lastInstanceStartDate.Year - startDate.Year; return(numberOfYears / period + 1); } }
public void ConvertFromDayOfWeek() { Assert.That(DaysOfWeekFlags.ConvertFrom(DayOfWeek.Monday), Is.EqualTo(EDaysOfWeekFlags.Monday)); Assert.That(DaysOfWeekFlags.ConvertFrom(DayOfWeek.Tuesday), Is.EqualTo(EDaysOfWeekFlags.Tuesday)); Assert.That(DaysOfWeekFlags.ConvertFrom(DayOfWeek.Wednesday), Is.EqualTo(EDaysOfWeekFlags.Wednesday)); Assert.That(DaysOfWeekFlags.ConvertFrom(DayOfWeek.Thursday), Is.EqualTo(EDaysOfWeekFlags.Thursday)); Assert.That(DaysOfWeekFlags.ConvertFrom(DayOfWeek.Friday), Is.EqualTo(EDaysOfWeekFlags.Friday)); Assert.That(DaysOfWeekFlags.ConvertFrom(DayOfWeek.Saturday), Is.EqualTo(EDaysOfWeekFlags.Saturday)); Assert.That(DaysOfWeekFlags.ConvertFrom(DayOfWeek.Sunday), Is.EqualTo(EDaysOfWeekFlags.Sunday)); Assert.That(() => DaysOfWeekFlags.ConvertFrom((DayOfWeek)int.MaxValue), Throws.TypeOf <ArgumentException>()); }
public override void ReadPatternTypeSpecific(byte[] buffer, ref int offset) { // we start reading from offset 22 if (PatternType == PatternType.Week) // specific days in week { DaysOfWeek = (DaysOfWeekFlags)LittleEndianReader.ReadUInt32(buffer, ref offset); } else { throw new InvalidRecurrencePatternException("Invalid Pattern Type"); } }
public void ConvertFromEveryDaysOfWeekExt() { EDaysOfWeekFlags daysOfWeekFlags = DaysOfWeekFlags.ConvertFrom(EDaysOfWeekExt.EveryDay); Assert.That((daysOfWeekFlags & EDaysOfWeekFlags.Monday) != EDaysOfWeekFlags.None, Is.True); Assert.That((daysOfWeekFlags & EDaysOfWeekFlags.Tuesday) != EDaysOfWeekFlags.None, Is.True); Assert.That((daysOfWeekFlags & EDaysOfWeekFlags.Wednesday) != EDaysOfWeekFlags.None, Is.True); Assert.That((daysOfWeekFlags & EDaysOfWeekFlags.Thursday) != EDaysOfWeekFlags.None, Is.True); Assert.That((daysOfWeekFlags & EDaysOfWeekFlags.Friday) != EDaysOfWeekFlags.None, Is.True); Assert.That((daysOfWeekFlags & EDaysOfWeekFlags.Saturday) != EDaysOfWeekFlags.None, Is.True); Assert.That((daysOfWeekFlags & EDaysOfWeekFlags.Sunday) != EDaysOfWeekFlags.None, Is.True); }
/// <summary> /// Converts value of DaysOfWeekFlags enum to the AlarmWeekFlag enum value. /// </summary> /// <param name="weekFlags">Input DaysOfWeekFlags value.</param> /// <returns>Output AlarmWeekFlag value.</returns> private AlarmWeekFlag DaysOfWeek2AlarmWeek(DaysOfWeekFlags weekFlags) { AlarmWeekFlag retFlag = 0; // Result flag returned at the end of method. retFlag = weekFlags.Monday ? retFlag | AlarmWeekFlag.Monday : retFlag; retFlag = weekFlags.Tuesday ? retFlag | AlarmWeekFlag.Tuesday : retFlag; retFlag = weekFlags.Wednesday ? retFlag | AlarmWeekFlag.Wednesday : retFlag; retFlag = weekFlags.Thursday ? retFlag | AlarmWeekFlag.Thursday : retFlag; retFlag = weekFlags.Friday ? retFlag | AlarmWeekFlag.Friday : retFlag; retFlag = weekFlags.Saturday ? retFlag | AlarmWeekFlag.Saturday : retFlag; retFlag = weekFlags.Sunday ? retFlag | AlarmWeekFlag.Sunday : retFlag; return(retFlag); }
public void ConvertFromDaysOfWeekExt() { List <EDaysOfWeekExt> everyDay = DaysOfWeekExt.WeekDays.Concat(DaysOfWeekExt.WeekendDays).ToList(); EDaysOfWeekFlags everyDayFlags = DaysOfWeekFlags.ConvertFrom(everyDay); Assert.That((everyDayFlags & EDaysOfWeekFlags.Monday) != EDaysOfWeekFlags.None, Is.True); Assert.That((everyDayFlags & EDaysOfWeekFlags.Tuesday) != EDaysOfWeekFlags.None, Is.True); Assert.That((everyDayFlags & EDaysOfWeekFlags.Wednesday) != EDaysOfWeekFlags.None, Is.True); Assert.That((everyDayFlags & EDaysOfWeekFlags.Thursday) != EDaysOfWeekFlags.None, Is.True); Assert.That((everyDayFlags & EDaysOfWeekFlags.Friday) != EDaysOfWeekFlags.None, Is.True); Assert.That((everyDayFlags & EDaysOfWeekFlags.Saturday) != EDaysOfWeekFlags.None, Is.True); Assert.That((everyDayFlags & EDaysOfWeekFlags.Sunday) != EDaysOfWeekFlags.None, Is.True); }
public override void ReadPatternTypeSpecific(byte[] buffer, ref int offset) { // we start reading from offset 22 if (PatternType == PatternType.Day) { } else if (PatternType == PatternType.Week) // EveryWeekday { DaysOfWeekFlags DaysOfWeek = (DaysOfWeekFlags)LittleEndianReader.ReadUInt32(buffer, ref offset); if (DaysOfWeek != DateTimeHelper.Weekdays) { throw new InvalidRecurrencePatternException("Invalid DaysOfWeek for Daily Recurrence Pattern"); } } else { throw new InvalidRecurrencePatternException("Invalid Pattern Type"); } }
public static int CalculateNumberOfOccurencesInWeek(DateTime startDate, DateTime lastInstanceStartDate, int period, DaysOfWeekFlags daysOfWeek) { TimeSpan ts = lastInstanceStartDate - startDate; int totalDays = (int)ts.TotalDays + 1; int daysOfWeekCount = GetSetBitCount((int)daysOfWeek); int numberOfWeeks = (totalDays / 7); int extraDays = totalDays - numberOfWeeks * 7; int extraOccurences = 0; DateTime date = DateTimeUtils.GetDayStart(startDate).AddDays(numberOfWeeks * 7); while (date <= lastInstanceStartDate) { if ((DateTimeHelper.GetDayOfWeek(date) & daysOfWeek) > 0) { extraOccurences++; } date = date.AddDays(1); } return(numberOfWeeks * daysOfWeekCount / period + extraOccurences); }
public void ConvertFromInvalidDaysOfWeekExt() { Assert.That(() => DaysOfWeekFlags.ConvertFrom((EDaysOfWeekExt)int.MaxValue), Throws.TypeOf <ArgumentException>()); }