如何在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

触发器在它们预定的时间正确地触发。只有化妆品。谢谢你

如何在Quartz.net中获得下一个预定的触发时间

正如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);