/// <summary>
 /// Constructor for a weekly schedule
 /// </summary>
 /// <param name="StartDay"></param>
 /// <param name="StartTime"></param>
 /// <param name="EndDay"></param>
 /// <param name="EndTime"></param>
 public ICalendar(ScheduleDay StartDay, ScheduleTime StartTime, ScheduleDay EndDay, ScheduleTime EndTime) : this(
         ScheduleFrequency.WEEKLY,
         new DateTime(1970, 01, (int)StartDay, StartTime.Hour, StartTime.Minutes, StartTime.Seconds),
         new DateTime(1970, 01, (int)EndDay, EndTime.Hour, EndTime.Minutes, EndTime.Seconds)
         )
 {
 }
 /// <summary>
 /// Constructor for a yearly schedule
 /// </summary>
 /// <param name="StartMonth"></param>
 /// <param name="StartDate">The date, value between 1-31</param>
 /// <param name="StartTime"></param>
 /// <param name="EndMonth"></param>
 /// <param name="EndDate">The date, value between 1-31</param>
 /// <param name="Endtime"></param>
 public ICalendar(ScheduleMonth StartMonth, int StartDate, ScheduleTime StartTime, ScheduleMonth EndMonth, int EndDate, ScheduleTime Endtime) : this(
         ScheduleFrequency.YEARLY,
         new DateTime(1970, (int)StartMonth, StartDate, StartTime.Hour, StartTime.Minutes, StartTime.Seconds),
         new DateTime(1970, (int)EndMonth, EndDate, Endtime.Hour, Endtime.Minutes, Endtime.Seconds)
         )
 {
 }
 /// <summary>
 /// Constructor for a monthly schedule and specify for which months it applies
 /// </summary>
 /// <param name="StartDate">Start date, value between 1 - 31</param>
 /// <param name="StartTime">Start time</param>
 /// <param name="EndDate">End date, value between 1-31</param>
 /// <param name="EndTime">End time</param>
 /// <param name="Months"></param>
 public ICalendar(int StartDate, ScheduleTime StartTime, int EndDate, ScheduleTime EndTime, ScheduleMonth[] Months) : this(ScheduleFrequency.MONTHLY, new DateTime(1970, 01, StartDate, StartTime.Hour, StartTime.Minutes, StartTime.Seconds), new DateTime(1970, 01, EndDate, EndTime.Hour, EndTime.Minutes, EndTime.Seconds))
 {
     if (!Months.Any())
     {
         throw new Exception("[ICalendar:MonthlySchedule] Months array argument cannot be empty");
     }
     else
     {
         m_months = Months;
     }
 }
 /// <summary>
 /// Constructor to create a daily schedule and specify for which days it applies
 /// </summary>
 /// <param name="StartTime"></param>
 /// <param name="EndTime"></param>
 /// <param name="Days">An array of ICalendarDays elements that represent days of the week (ex: MO, TU, WE ...)</param>
 public ICalendar(ScheduleTime StartTime, ScheduleTime EndTime, ScheduleDay[] Days) : this(ScheduleFrequency.DAILY, new DateTime(1970, 01, 01, StartTime.Hour, StartTime.Minutes, StartTime.Seconds), new DateTime(1970, 01, 01, EndTime.Hour, EndTime.Minutes, EndTime.Seconds))
 {
     if (!Days.Any())
     {
         throw new Exception("[ICalendar:DailySchedule] Days array argument cannot be empty");
     }
     else
     {
         m_days = Days;
     }
 }