/// <summary> /// Converts the string representation of a cron expression to its <see cref="Cron"/> object equivalent. /// </summary> /// <param name="cronExpr"> /// A string that represents the cron expression to convert. /// </param> /// <returns> /// An object of <see cref="Cron"/>. /// </returns> /// <exception cref="CronParserException"> /// Throw if failed to parse the cron expression. /// </exception> public static CronInfo Parse(string cronExpr) { if (String.IsNullOrWhiteSpace(cronExpr) && !Regex.IsMatch(cronExpr, CharacterCheckPattern)) { throw new CronParserException($"Illegal cron expression: {cronExpr}."); } var constraints = cronExpr.Trim().Split(' '); if (constraints.Length != 5) { throw new CronParserException($"Illegal cron expression: {cronExpr}."); } var cron = new CronInfo { ExprMinute = constraints[0], ExprHour = constraints[1], ExprDayOfMonth = constraints[2], ExprMonth = constraints[3], ExprDayOfWeek = constraints[4] }; cron.Minutes = ParseSingleNode(cron.ExprMinute, MinuteRange); cron.Hours = ParseSingleNode(cron.ExprHour, HourRange); cron.DaysOfMonth = ParseSingleNode(cron.ExprDayOfMonth, DayOfMonthRange); cron.Months = ParseSingleNode <Month>(cron.ExprMonth, MonthRange); cron.DaysOfWeek = ParseSingleNode <Models.DayOfWeek>(cron.ExprDayOfWeek, DayOfWeekRange); return(cron); }
/// <summary> /// Add a cron task to current scheduler with cron information and the action. /// </summary> /// <param name="cronInfo"> /// An object of <see cref="Cron"/>. /// </param> /// <param name="action"> /// An action to run when the scheduled task is triggered. /// </param> /// <param name="taskId"> /// Task's id, which helps you to get a better control of the task. If it's null or empty, a random guid /// will be generated. /// </param> /// <returns> /// True if the task is scheduled successfully; otherwise, false. /// </returns> /// <exception cref="ArgumentNullException"> /// Throw if cronInfo or action is null. /// </exception> public bool AddTask(CronInfo cronInfo, Action action, string taskId = null) { if (cronInfo == null) { throw new ArgumentNullException(nameof(cronInfo)); } if (action == null) { throw new ArgumentNullException(nameof(action)); } var task = new CronTask { Id = String.IsNullOrEmpty(taskId) ? Guid.NewGuid().ToString("N") : taskId, CronInfo = cronInfo, Action = action, IsEnabled = true }; return(AddTask(task)); }
/// <summary> /// Get information from a cron expresison /// </summary> /// <param name="CronExpression"></param> /// <returns></returns> public static CronInfo GetCronInfo(string CronExpression) { CronInfo Result = new CronInfo(); try { // Infos => https://docs.oracle.com/cd/E12058_01/doc/doc.1014/e12030/cron_expressions.htm if (!String.IsNullOrWhiteSpace(CronExpression)) { CronExpression = CronExpression.Trim(); string[] TabCron = CronExpression.Split(' '); if (TabCron.Length == 7) { string Second = TabCron[0]; string Minute = TabCron[1]; string Hour = TabCron[2]; string DayOfMonth = TabCron[3]; string Month = TabCron[4]; string DayOfWeek = TabCron[5]; string Year = TabCron[6]; DateTime Now = DateTime.UtcNow; DateTime DateSchedule = new DateTime(Now.Year, Now.Month, Now.Day, Convert.ToInt32(Hour), Convert.ToInt32(Minute), Convert.ToInt32(Second)).ToLocalTime(); if (DayOfMonth == "*" || DayOfMonth == "?") { Result.Periodicity = CommonsConst.Periodicities.Daily;; Result.ScheduleInfo = DateSchedule.ToString("HH : mm : ss"); } } } } catch (Exception e) { Result = null; Commons.Logger.GenerateError(e, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType, "CronExpression = " + CronExpression); } return(Result); }