2011-09-02 13 views
5

Estoy intentando llamar a algo cada 3 meses (trimestralmente) en Quartz.NET (utilizando tanto la versión estable como la más reciente 2 que es beta con los mismos resultados).Quartz.Net - Cada 3 meses

Creo cron trigger con 0 30 8 3 */3 ? * que se llamará cada 3 meses a las 8:30 a.m. del tercer mes del mes.

Por lo tanto, desde el 2 de septiembre de hoy espero que se active mañana. Sin embargo, el próximo tiempo de ejecución se muestra como el próximo mes. ¿Por qué es así?

Actualización: Según las respuestas que obtuve creé siguiente método - podría ser útil para alguien:

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()); 
     } 

PD: Yo no utilizar índices durante meses porque por alguna razón que no funcionaba bien con mi Quartz (v2 BETA). También es más fácil de leer en el nivel de base de datos.

Ejemplo de llamada - Cada 3 meses sobre la base de startDate:

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

Respuesta

8

Bueno, yo creo que es porque el programador verificará que el mes se puede dividir por 3, ya que durante todo el mes de cuarzo se basan 0 (de acuerdo con: http://www.quartz-scheduler.org/documentation/quartz-2.x/tutorials/tutorial-lesson-06), el mes que se programará será enero, abril, julio y octubre.

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

El cuarzo planificador analizará su expresión cron y mantener sólo aquellos en los que su módulo 3 es igual a 0.

Si usted quiere que sea de 1 mes antes de que (marzo, junio, septiembre y octubre) tendrá que configurarlo para:

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

+0

¿Cómo le hacen desencadenan cada 3 meses, entonces? – Luke

+1

Bueno, como dije en mi respuesta: 0 30 8 3 MAR, JUN, SEP, DEC? * –

+1

Esto será cada 3 meses, a partir de 2011-09-03 08:30:00 –

5

Una buena página para crear expresiones cron: http://www.cronmaker.com/

formato Cron:

0 0 12 1 1/3 ? * 

ejecuta cada:

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 
+1

qué pasaría si damos 31. ¿Ignorará si el día no existe? –