public void ScheduleRabbitMQMessages() { foreach (var scheduledMessage in _scheduledMessagesRetriever.GetScheduledMessages(true)) { if (!scheduledMessage.MessageRuns.Any(mr => !mr.SendAttemptTime.HasValue)) { DateTimeOffset lastRunTime; if (scheduledMessage.MessageRuns.Any()) { lastRunTime = scheduledMessage.MessageRuns.Max(mr => mr.SendAttemptTime.Value); } else { lastRunTime = scheduledMessage.EffectiveDate; } var cronExpression = new Quartz.CronExpression(scheduledMessage.CronExpression); cronExpression.TimeZone = TimeZoneInfo.Utc; var nextRunTime = cronExpression.GetTimeAfter(lastRunTime); if (nextRunTime <= DateTimeOffset.UtcNow) { var messageRun = SendMessage(scheduledMessage); _messageRunLogger.LogMessageRun(messageRun); } } } }
/// <summary> /// Initializes a new instance of the <see cref="CronExpression"/> class. /// </summary> /// <param name="cronExpression">The cron expression.</param> public CronExpression(string cronExpression) { if (Keys.ContainsKey(cronExpression)) { cronExpression = Keys[cronExpression]; } cron = new Quartz.CronExpression(cronExpression); }
internal CronTrigger(string expression, Utils.IDateTimeProvider dateTimeProvider) { if (expression == null) { throw new ArgumentNullException("expression"); } if (dateTimeProvider == null) { throw new ArgumentNullException("dateTimeProvider"); } this.cronexpression = new Quartz.CronExpression(expression); this.dateTimeProvider = dateTimeProvider; }
/// <summary> /// Gets the array of times. /// </summary> /// <param name="cronExpression">The cron expression.</param> /// <returns>IEnumerable<System.Nullable<DateTimeOffset>>.</returns> /// <exception cref="ArgumentException">cronExpression</exception> public static IEnumerable <DateTimeOffset?> GetArrayOfTimes(string cronExpression) { if (string.IsNullOrEmpty(cronExpression)) { throw new ArgumentException("cronExpression"); } var result = new List <DateTimeOffset?>(); var jobSchedules = new List <DateTimeOffset>(); var quartzHelper = new Quartz.CronExpression(cronExpression); var dt = DateTimeOffset.Now; var numberOfDays = 0; var numberOfSchedules = 30; var restrictToDays = 20; while (numberOfDays <= restrictToDays) { var nextScheduledJob = quartzHelper.GetNextValidTimeAfter(dt); if (nextScheduledJob != null) { dt = nextScheduledJob.Value; if (result.Count != 0) { var lastDate = result.Last(); var diff = dt.Day - lastDate.Value.Day; if (diff >= 1) { numberOfDays++; } } result.Add(nextScheduledJob.GetValueOrDefault().ToLocalTime()); if (result.Count() == numberOfSchedules) { break; } } } return(result); }
public JsonResult CalcRunTime(string CronExpression) { Quartz.CronExpression e = new Quartz.CronExpression(CronExpression); List <string> results = new List <string>(); DateTimeOffset dto = DateTimeOffset.Now; DateTimeOffset?lastfire = dto; for (int i = 0; i < 5 && lastfire != null; i++) { lastfire = e.GetNextValidTimeAfter(lastfire.Value); if (lastfire != null) { results.Add(lastfire.Value.ToLocalTime().ToString("yyyy/MM/dd HH:mm:ss")); } } results = results.Take(5).ToList(); while (results.Count < 5) { results.Add(""); } return(Json(results, JsonRequestBehavior.AllowGet)); }
/// <summary> /// Tests this instance. /// </summary> public static void Create() { const string file = ".\\Cron Schedule Helper.md"; StringBuilder sb = new StringBuilder(); foreach (var p in GetValues()) { DateTime now = DateTime.Now.ToUniversalTime(); try { Quartz.CronExpression expr = new Quartz.CronExpression(p); var value = expr.GetNextValidTimeAfter(now); sb.AppendLine(p.PadRight(32) + "\t" + ExpressionDescriptor.GetDescription(p)); } catch (Exception) { continue; } } File.WriteAllText(file, sb.ToString()); }