如何在Quartz.net中获得下一个预定的触发时间
本文关键字:时间 下一个 Quartz net | 更新日期: 2023-09-27 18:01:29
这是我的第一个Quartz.net项目。我已经做了基本的功课,我所有的cron都正确地触发了火,生活很好。然而,我很难在api文档中找到一个属性。我知道它在那里,只是找不到。我怎样才能得到扳机预定发射的确切时间?如果我有一个触发器比如每天早上8点在触发器类中这个早上8点存储在哪里?
_quartzScheduler.ScheduleJob(job, trigger);
Program.Log.InfoFormat
("Job {0} will trigger next time at: {1}", job.FullName, trigger.WhatShouldIPutHere?);
到目前为止我已经试过了
GetNextFireTimeUtc(), StartTimeUTC和上面显示的_quartzScheduler.ScheduleJob()的返回值。http://quartznet.sourceforge.net/apidoc/topic645.html
触发器在它们预定的时间正确地触发。只有化妆品。谢谢你
正如jhouse所说,ScheduleJob返回下一个调度。我使用的是Quartz.net 1.0.3。一切都很好。
请记住,Quartz.net使用UTC日期/时间格式。
我已经使用了这个cron表达式:"0 0 8 1/1 * ? *"
.
DateTime ft = sched.ScheduleJob(job, trigger);
如果我输出ft.ToString("dd/MM/yyyy HH:mm")
,我得到这个09/07/2011 07.00
这是不对的,因为我已经把我的扳机安排在每天早上8点(我在伦敦)。
如果我打印ft.ToLocalTime().ToString("dd/MM/yyyy HH:mm")
,我得到我期望的09/07/2011 08.00
你应该得到你从getNextFireTime之后(从该方法的值应该是准确的调用ScheduleJob()后)。此外,ScheduleJob()方法应该返回第一次执行时间的日期。
无需调度作业,您可以直接通过ScheduleJob
内部使用的CronExpression
获得作业:
var next = new CronExpression("0 0 8 1/1 * ? *").GetTimeAfter(DateTimeOffset.UtcNow);
如果你想要更多的时间戳,那么在循环中运行它,将前一个时间戳传递给下一个函数:
public static class Generator
{
public static IEnumerable<TItem> Generate<TSource, TItem>(this TSource source, Func<TSource, TItem> first, Func<TSource, TItem, TItem> next)
{
var previous = first(source);
yield return previous;
while (true)
{
var current = next(source, previous);
yield return current;
previous = current;
}
}
}
var timestamps = new CronExpression("0 0 8 1/1 * ? *").Generate
(
first: cron => cron.GetTimeAfter(DateTimeOffset.UtcNow),
next: (cron, previous) => previous.HasValue ? cron.GetTimeAfter(previous.Value) : default
);
var results = timestamps.Where(x => x.HasValue).Take(10);