【问题标题】:Quartz.Net - Every 3 monthsQuartz.Net - 每 3 个月
【发布时间】:2011-11-08 20:50:11
【问题描述】:

我试图在 Quartz.NET 中每 3 个月(每季度)调用一次(使用稳定版和最新版 2,它是测试版,结果相同)。

我使用 0 30 8 3 */3 ? * 创建 cron 触发器,每 3 个月在它发生的第三个月的上午 8.30 调用一次。

所以从技术上讲,自今天 9 月 2 日以来,我预计它会在明天触发。然而,它的下一个运行时间显示为下个月。为什么会这样?

更新:根据我得到的答案,我创建了以下方法 - 可能对某人有用:

public static string CalculateMonthsWithInterval(int startMonth, int interval)
        {
            var months = new List<string>();
            var monthNames = new [] {"JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC"};

            var monthSelector = startMonth % interval;

            for (var i = 0; i < 12; i++)
            {
                if (i % interval == monthSelector)
                {
                    months.Add(monthNames[i]);
                }
            }

            return string.Join(",", months.ToArray());
        }

Ps:我有几个月没有使用索引,因为由于某种原因它不能很好地与我的 Quartz (v2 BETA) 配合使用。在数据库级别也更容易阅读。

示例调用 - 基于 startDate 每 3 个月:

var cronMonths = CronUtils.CalculateMonthsWithInterval((startDate.Month - 1), 3);

【问题讨论】:

    标签: c# scheduling quartz.net


    【解决方案1】:

    我认为这是因为调度程序将验证哪个月份可以除以 3,因为 Quartz 中的所有月份都基于 0(根据:http://www.quartz-scheduler.org/documentation/quartz-2.x/tutorials/tutorial-lesson-06),将安排的月份将是 1 月、4 月、7 月和十月。

    0 mod 3 = 0 -> JAN
    1 mod 3 = 1 -> FEB
    ...
    8 mod 3 = 2 -> SEP
    9 mod 3 = 0 -> OCT
    

    Quartz 调度程序将分析您的 cron 表达式并仅保留其模数 3 等于 0 的那些。

    如果您希望在此之前的 1 个月(3 月、6 月、9 月和 10 月),您必须将其设置为:

    0 30 8 3 MAR,JUN,SEP,DEC ? *

    【讨论】:

    • 那你如何让它每 3 个月触发一次?
    • 好吧,就像我在回答中所说的那样:0 30 8 3 MAR,JUN,SEP,DEC ? *
    • 每3个月一次,从2011-09-03 08:30:00开始
    【解决方案2】:

    创建 cron 表达式的好页面:http://www.cronmaker.com/

    Cron 格式:

    0 0 12 1 1/3 ? *
    

    执行每个:

    1. Saturday, April 1, 2017 12:00 PM
    2.  Saturday, July 1, 2017 12:00 PM
    3.  Sunday, October 1, 2017 12:00 PM
    4.  Monday, January 1, 2018 12:00 PM
    5.  Sunday, April 1, 2018 12:00 PM
    

    【讨论】:

    • 如果我们给 31 会发生什么。如果日期不存在会忽略吗?
    猜你喜欢
    • 1970-01-01
    • 2012-04-26
    • 1970-01-01
    • 2011-10-08
    • 2019-03-03
    • 1970-01-01
    • 1970-01-01
    • 2018-08-12
    • 2021-02-17
    相关资源
    最近更新 更多