public static CrontabSchedule Parse(string expression, CronStringFormat format = CronStringFormat.Default) { return(new CrontabSchedule { Format = format, Filters = _ParseToDictionary(expression, format) }); }
public static CrontabSchedule TryParse(string expression, CronStringFormat format = CronStringFormat.Default) { try { return(Parse(expression, format)); } catch (Exception) { return(null); } }
static void CronFinite(string cronExpression, string startTimeString, string endTimeString, CronStringFormat format) { var schedule = CrontabSchedule.Parse(cronExpression, format); var occurrence = schedule.GetNextOccurrence(Time(startTimeString), Time(endTimeString)); Assert.AreEqual(endTimeString, TimeString(occurrence), "Occurrence of <{0}> after <{1}> did not terminate with <{2}>.", cronExpression, startTimeString, endTimeString); }
static void CronCall(string startTimeString, string cronExpression, string nextTimeString, CronStringFormat format) { var schedule = CrontabSchedule.Parse(cronExpression, format); var next = schedule.GetNextOccurrence(Time(startTimeString)); var message = string.Format("Occurrence of <{0}> after <{1}>, format <{2}>.", cronExpression, startTimeString, Enum.GetName(typeof(CronStringFormat), format)); Assert.AreEqual(nextTimeString, TimeString(next), message); }
static void BadField(string expression, CronStringFormat format) { Assert2.Throws<CrontabException>(() => CrontabSchedule.Parse(expression, format)); }
/// <summary> /// Initializes a new instance of the <see cref="RecurringDateRangeJobScheduler"/> /// class with default background job factory. /// </summary> public RecurringDateRangeJobScheduler(CronStringFormat cronStringFormat = CronStringFormat.Default, bool ignoreTimeComponentInStartEndDates = false) : this(new BackgroundJobFactory()) { _cronStringFormat = cronStringFormat; _ignoreTimeComponentInStartEndDates = ignoreTimeComponentInStartEndDates; }
private static Dictionary <CrontabFieldKind, List <ICronFilter> > _ParseToDictionary(string cron, CronStringFormat format) { if (string.IsNullOrWhiteSpace(cron)) { throw new CrontabException("The provided cron string is null, empty or contains only whitespace"); } var fields = new Dictionary <CrontabFieldKind, List <ICronFilter> >(); var instructions = cron.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); var expectedCount = Constants.ExpectedFieldCounts[format]; if (instructions.Length > expectedCount) { throw new CrontabException(string.Format("The provided cron string <{0}> has too many parameters", cron)); } if (instructions.Length < expectedCount) { throw new CrontabException(string.Format("The provided cron string <{0}> has too few parameters", cron)); } var defaultFieldOffset = 0; if (format == CronStringFormat.WithSeconds || format == CronStringFormat.WithSecondsAndYears) { fields.Add(CrontabFieldKind.Second, _ParseField(instructions[0], CrontabFieldKind.Second)); defaultFieldOffset = 1; } fields.Add(CrontabFieldKind.Minute, _ParseField(instructions[defaultFieldOffset + 0], CrontabFieldKind.Minute)); fields.Add(CrontabFieldKind.Hour, _ParseField(instructions[defaultFieldOffset + 1], CrontabFieldKind.Hour)); fields.Add(CrontabFieldKind.Day, _ParseField(instructions[defaultFieldOffset + 2], CrontabFieldKind.Day)); fields.Add(CrontabFieldKind.Month, _ParseField(instructions[defaultFieldOffset + 3], CrontabFieldKind.Month)); fields.Add(CrontabFieldKind.DayOfWeek, _ParseField(instructions[defaultFieldOffset + 4], CrontabFieldKind.DayOfWeek)); if (format == CronStringFormat.WithYears || format == CronStringFormat.WithSecondsAndYears) { fields.Add(CrontabFieldKind.Year, _ParseField(instructions[defaultFieldOffset + 5], CrontabFieldKind.Year)); } CheckForIllegalFilters(fields); return(fields); }
// In the event a developer creates their own instance public CrontabSchedule() { Filters = new Dictionary <CrontabFieldKind, List <ICronFilter> >(); Format = CronStringFormat.Default; }
private static Dictionary<CrontabFieldKind, List<ICronFilter>> ParseToDictionary(string cron, CronStringFormat format) { if (cron.IsNullOrWhiteSpace()) throw new CrontabException("The provided cron string is null, empty or contains only whitespace"); var fields = new Dictionary<CrontabFieldKind, List<ICronFilter>>(); var instructions = cron.Split(new [] {' '}, StringSplitOptions.RemoveEmptyEntries); var expectedCount = Constants.ExpectedFieldCounts[format]; if (instructions.Length > expectedCount) throw new CrontabException(string.Format("The provided cron string <{0}> has too many parameters", cron)); if (instructions.Length < expectedCount) throw new CrontabException(string.Format("The provided cron string <{0}> has too few parameters", cron)); var defaultFieldOffset = 0; if (format == CronStringFormat.WithSeconds || format == CronStringFormat.WithSecondsAndYears) { fields.Add(CrontabFieldKind.Second, ParseField(instructions[0], CrontabFieldKind.Second)); defaultFieldOffset = 1; } fields.Add(CrontabFieldKind.Minute, ParseField(instructions[defaultFieldOffset + 0], CrontabFieldKind.Minute)); fields.Add(CrontabFieldKind.Hour, ParseField(instructions[defaultFieldOffset + 1], CrontabFieldKind.Hour)); fields.Add(CrontabFieldKind.Day, ParseField(instructions[defaultFieldOffset + 2], CrontabFieldKind.Day)); fields.Add(CrontabFieldKind.Month, ParseField(instructions[defaultFieldOffset + 3], CrontabFieldKind.Month)); fields.Add(CrontabFieldKind.DayOfWeek, ParseField(instructions[defaultFieldOffset + 4], CrontabFieldKind.DayOfWeek)); if (format == CronStringFormat.WithYears || format == CronStringFormat.WithSecondsAndYears) fields.Add(CrontabFieldKind.Year, ParseField(instructions[defaultFieldOffset + 5], CrontabFieldKind.Year)); CheckForIllegalFilters(fields); return fields; }
public static CrontabSchedule TryParse(string expression, CronStringFormat format = CronStringFormat.Default) { try { return Parse(expression, format); } catch (Exception) { return null; } }
public static CrontabSchedule Parse(string expression, CronStringFormat format = CronStringFormat.Default) { return new CrontabSchedule { Format = format, Filters = ParseToDictionary(expression, format) }; }
// In the event a developer creates their own instance public CrontabSchedule() { Filters = new Dictionary<CrontabFieldKind, List<ICronFilter>>(); Format = CronStringFormat.Default; }
public CronAttribute(string expression, int defer = 0, CronStringFormat format = CronStringFormat.Default) { Expression = expression ?? throw new ArgumentNullException(nameof(expression)); Defer = defer; Format = format; }