hig*_*ers 4 quartz-scheduler quartz.net
我尝试了几个小时的Quartz.com文档和谷歌搜索...但是找不到关于如何获得Next Job的一篇好文章(将来可以解雇).
我正在使用CronTrigger Expression来安排作业,使用VB.net(winforms).工作正常...但我希望我的用户看到它下一次火灾.我在我的数据库中存储CronExpression,我可以使用该Expression 向我的最终用户显示下一个Fire Date/Time吗?或者如果有其他可能的方法,请提供建议(简单明了).
谢谢
编辑
以下代码返回下一个作业将在12分钟而不是20分钟后触发
Dim exp As CronExpression = New CronExpression("0 0/20 * * * ?")
Dim nextFire As String = exp.GetNextValidTimeAfter(DateTime.Now)
MsgBox(nextFire)
Run Code Online (Sandbox Code Playgroud)
您可以创建一个新的JobKey
JobKey jobKey = new JobKey(jobName, groupName);
Run Code Online (Sandbox Code Playgroud)
并使用键来获取作业详细信息:
var detail = scheduler.GetJobDetail(jobKey);
Run Code Online (Sandbox Code Playgroud)
这是一个简单的功能,可以满足您的需求:
private DateTime getNextFireTimeForJob(IScheduler scheduler, string jobName, string groupName = "")
{
JobKey jobKey = new JobKey(jobName, groupName);
DateTime nextFireTime = DateTime.MinValue;
bool isJobExisting = Scheduler.CheckExists(jobKey);
if (isJobExisting)
{
var detail = scheduler.GetJobDetail(jobKey);
var triggers = scheduler.GetTriggersOfJob(jobKey);
if (triggers.Count > 0)
{
var nextFireTimeUtc = triggers[0].GetNextFireTimeUtc();
nextFireTime = TimeZone.CurrentTimeZone.ToLocalTime(nextFireTimeUtc.Value.DateTime);
}
}
return (nextFireTime);
}
Run Code Online (Sandbox Code Playgroud)
仅当每个作业有一个触发器时,它才有效.
如果你的工作中有多个触发器,你可以遍历它们:
foreach (ITrigger trigger in triggers)
{
Console.WriteLine(jobKey.Name);
Console.WriteLine(detail.Description);
Console.WriteLine(trigger.Key.Name);
Console.WriteLine(trigger.Key.Group);
Console.WriteLine(trigger.GetType().Name);
Console.WriteLine(scheduler.GetTriggerState(trigger.Key));
DateTimeOffset? nextFireTime = trigger.GetNextFireTimeUtc();
if (nextFireTime.HasValue)
{
Console.WriteLine(TimeZone.CurrentTimeZone.ToLocalTime(nextFireTime.Value.DateTime).ToString());
}
}
Run Code Online (Sandbox Code Playgroud)
或使用Linq(System.Linq):
var myTrigger = triggers.Where(f => f.Key.Name == "[trigger name]").SingleOrDefault();
Run Code Online (Sandbox Code Playgroud)