/// <summary>
        /// Determines if the current rule should be applied depending on the time pattern that has been applied to it.
        /// </summary>
        /// <param name="timezone">The timezone to adjust for. This will typically be the timezone set by the user that owns
        /// the dialplan. If no timezone is specified UTC will be assumed.</param>
        /// <returns>True if the rule should be applied, false otherwise.</returns>
        public bool IsTimeMatch(DateTimeOffset now, string timezone)
        {
            var localTime = now.AddMinutes(TimeZoneHelper.GetTimeZonesUTCOffsetMinutes(timezone));

            if (localTime.DayOfWeek == DayOfWeek.Monday && TimePattern.IndexOf("M", StringComparison.OrdinalIgnoreCase) == -1)
            {
                return(false);
            }
            else if (localTime.DayOfWeek == DayOfWeek.Tuesday && TimePattern.IndexOf("Tu", StringComparison.OrdinalIgnoreCase) == -1)
            {
                return(false);
            }
            else if (localTime.DayOfWeek == DayOfWeek.Wednesday && TimePattern.IndexOf("W", StringComparison.OrdinalIgnoreCase) == -1)
            {
                return(false);
            }
            else if (localTime.DayOfWeek == DayOfWeek.Thursday && TimePattern.IndexOf("Th", StringComparison.OrdinalIgnoreCase) == -1)
            {
                return(false);
            }
            else if (localTime.DayOfWeek == DayOfWeek.Friday && TimePattern.IndexOf("F", StringComparison.OrdinalIgnoreCase) == -1)
            {
                return(false);
            }
            else if (localTime.DayOfWeek == DayOfWeek.Saturday && TimePattern.IndexOf("Sa", StringComparison.OrdinalIgnoreCase) == -1)
            {
                return(false);
            }
            else if (localTime.DayOfWeek == DayOfWeek.Sunday && TimePattern.IndexOf("Su", StringComparison.OrdinalIgnoreCase) == -1)
            {
                return(false);
            }

            var timesMatch = Regex.Match(TimePattern, TIMES_REGEX);

            if (timesMatch.Success)
            {
                int startHour   = Convert.ToInt32(timesMatch.Result("${startHour}"));
                int startMinute = Convert.ToInt32(timesMatch.Result("${startMinute}"));
                int endHour     = Convert.ToInt32(timesMatch.Result("${endHour}"));
                int endMinute   = Convert.ToInt32(timesMatch.Result("${endMinute}"));

                TimeSpan startTime = new TimeSpan(startHour, startMinute, 0);
                TimeSpan endTime   = new TimeSpan(endHour, endMinute, 0);

                if (localTime.TimeOfDay < startTime || localTime.TimeOfDay > endTime)
                {
                    return(false);
                }
            }

            return(true);
        }
        /// <summary>
        /// Gets a list of the days that the rule's time pattern matches.
        /// </summary>
        /// <returns>A list of matching days.</returns>
        public List <DayOfWeek> MatchedDays()
        {
            var days = new List <DayOfWeek>();

            if (TimePattern.IndexOf("M", StringComparison.OrdinalIgnoreCase) != -1)
            {
                days.Add(DayOfWeek.Monday);
            }

            if (TimePattern.IndexOf("Tu", StringComparison.OrdinalIgnoreCase) != -1)
            {
                days.Add(DayOfWeek.Tuesday);
            }

            if (TimePattern.IndexOf("W", StringComparison.OrdinalIgnoreCase) != -1)
            {
                days.Add(DayOfWeek.Wednesday);
            }

            if (TimePattern.IndexOf("Th", StringComparison.OrdinalIgnoreCase) != -1)
            {
                days.Add(DayOfWeek.Thursday);
            }

            if (TimePattern.IndexOf("F", StringComparison.OrdinalIgnoreCase) != -1)
            {
                days.Add(DayOfWeek.Friday);
            }

            if (TimePattern.IndexOf("Sa", StringComparison.OrdinalIgnoreCase) != -1)
            {
                days.Add(DayOfWeek.Saturday);
            }

            if (TimePattern.IndexOf("Su", StringComparison.OrdinalIgnoreCase) != -1)
            {
                days.Add(DayOfWeek.Sunday);
            }

            return(days);
        }