Inheritance: Quartz.Impl.Calendar.BaseCalendar
        public bool Equals(LocalDailyCalendar obj)
        {
            if (obj == null)
            {
                return(false);
            }
            bool baseEqual = GetBaseCalendar() != null?
                             GetBaseCalendar().Equals(obj.GetBaseCalendar()) : true;

            return(baseEqual && (InvertTimeRange == obj.InvertTimeRange) &&
                   (rangeStartingHourOfDay == obj.rangeStartingHourOfDay) &&
                   (rangeStartingMinute == obj.rangeStartingMinute) &&
                   (rangeStartingSecond == obj.rangeStartingSecond) &&
                   (rangeStartingMillis == obj.rangeStartingMillis) &&
                   (rangeEndingHourOfDay == obj.rangeEndingHourOfDay) &&
                   (rangeEndingMinute == obj.rangeEndingMinute) &&
                   (rangeEndingSecond == obj.rangeEndingSecond) &&
                   (rangeEndingMillis == obj.rangeEndingMillis));
        }
        /// <summary>
        /// Builds a <see cref="DailyCalendar"/> on the given allowed hours to run.
        /// </summary>
        /// <param name="fromTimeString">From time.</param>
        /// <param name="toTimeString">To time.</param>
        /// <returns></returns>
        private ICalendar BuildCalendarOnTimeRange(ICalendar baseCalendar, string fromTimeString, string toTimeString, TimeZoneInfo timeZone)
        {
            DateTime? dFromTime = GrammarHelper.GetTimeFromTimeString(fromTimeString);
            DateTime? dToTime = GrammarHelper.GetTimeFromTimeString(toTimeString);

            DateTime fromTime = dFromTime.Value;
            DateTime toTime = dToTime.Value;

            //adjust the utc month,day,year to match each other
            toTime = new DateTime(fromTime.Year, fromTime.Month, fromTime.Day, toTime.Hour, toTime.Minute, toTime.Second, toTime.Millisecond);

            bool shouldInvertTimeRange = false; //false = exclusive time range

            //if the toTime is lower than fromTime
            if (toTime < fromTime)
            {
                //switch the from and to times
                DateTime fromTemp = fromTime;
                fromTime = toTime.AddMilliseconds(1);
                toTime = fromTemp.AddMilliseconds(-1);
            }
            else
            {
                //check to see if they are the same
                //TODO: do something about this hacking the extra second
                if (fromTime.Equals(toTime))
                {
                    toTime = toTime.AddSeconds(1);
                }
                shouldInvertTimeRange = true; //turn this into an inclusive range
            }

            LocalDailyCalendar calendar = null;
            if (baseCalendar != null)
                calendar = new LocalDailyCalendar(baseCalendar, fromTime, toTime);
            else
                calendar = new LocalDailyCalendar(fromTime, toTime);

            calendar.InvertTimeRange = shouldInvertTimeRange;

            calendar.TimeZone = timeZone;
            return calendar;
        }
        public bool Equals(LocalDailyCalendar obj)
        {
            if (obj == null)
                return false;
            bool baseEqual = GetBaseCalendar() != null ?
                             GetBaseCalendar().Equals(obj.GetBaseCalendar()) : true;

            return baseEqual && (InvertTimeRange == obj.InvertTimeRange) &&
                   (rangeStartingHourOfDay == obj.rangeStartingHourOfDay) &&
                   (rangeStartingMinute == obj.rangeStartingMinute) &&
                   (rangeStartingSecond == obj.rangeStartingSecond) &&
                   (rangeStartingMillis == obj.rangeStartingMillis) &&
                   (rangeEndingHourOfDay == obj.rangeEndingHourOfDay) &&
                   (rangeEndingMinute == obj.rangeEndingMinute) &&
                   (rangeEndingSecond == obj.rangeEndingSecond) &&
                   (rangeEndingMillis == obj.rangeEndingMillis);

        }
        public override object Clone()
        {
            LocalDailyCalendar clone = (LocalDailyCalendar)base.Clone();

            return(clone);
        }