コード例 #1
0
        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);
            }
        }
コード例 #2
0
 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>());
 }
コード例 #3
0
 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");
     }
 }
コード例 #4
0
        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);
        }
コード例 #5
0
        /// <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);
        }
コード例 #6
0
        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);
        }
コード例 #7
0
 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");
     }
 }
コード例 #8
0
        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);
        }
コード例 #9
0
 public void ConvertFromInvalidDaysOfWeekExt()
 {
     Assert.That(() => DaysOfWeekFlags.ConvertFrom((EDaysOfWeekExt)int.MaxValue), Throws.TypeOf <ArgumentException>());
 }