/// <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); }