web-dev-qa-db-fra.com

Quartz.Net comment créer un horaire quotidien qui ne gagne pas 1 minute par jour

J'essaie de créer un horaire quotidien répétitif dans Quartz.Net mais j'ai quelques problèmes:

Tout d'abord, je construis un horaire quotidien, répétant à 12:45 en utilisant du code Quartz.Net comme ceci:

var trigger = TriggerBuilder.Create()
  .WithDailyTimeIntervalSchedule(s => 
      s.OnEveryDay().StartingDailyAt(new TimeOfDay(13, 00)))
.Build();

var times = TriggerUtils.ComputeFireTimes(trigger as IOperableTrigger, null, 10);

foreach (var time in times) Console.WriteLine(time);

Ceci est exécuté en Nouvelle-Zélande, DST (donc UTC + 13: 00)

Et la sortie que j'obtiens est plutôt étrange:

5/10/2012 1:00:00 p.m. +13:00
5/10/2012 12:01:00 a.m. +00:00
5/10/2012 12:02:00 a.m. +00:00
5/10/2012 12:03:00 a.m. +00:00
5/10/2012 12:04:00 a.m. +00:00
5/10/2012 12:05:00 a.m. +00:00
5/10/2012 12:06:00 a.m. +00:00
5/10/2012 12:07:00 a.m. +00:00
5/10/2012 12:08:00 a.m. +00:00
5/10/2012 12:09:00 a.m. +00:00

La première date/heure est affichée à l'aide du fuseau horaire local, puis les autres sont affichées avec UTC, et chaque valeur d'heure est incrémentée de 1 minute, et la date ne change jamais.

Je sens que je pourrais manquer quelque chose de fondamental ici avec le calendrier quotidien, mais je ne sais pas ce que c'est?

Modifier

En tant que mise à jour pour ce faire, je suis maintenant passé à l'utilisation d'un déclencheur basé sur une expression CRON:

TriggerBuilder.Create()
  .WithCronSchedule(string.Format("0 {0} {1} ? * *", 0, 13))
  .Build();

Et cela m'a donné les résultats que j'attendais:

5/10/2012 12:00:00 a.m. +00:00
6/10/2012 12:00:00 a.m. +00:00
7/10/2012 12:00:00 a.m. +00:00
8/10/2012 12:00:00 a.m. +00:00
9/10/2012 12:00:00 a.m. +00:00
10/10/2012 12:00:00 a.m. +00:00
11/10/2012 12:00:00 a.m. +00:00
12/10/2012 12:00:00 a.m. +00:00
13/10/2012 12:00:00 a.m. +00:00
14/10/2012 12:00:00 a.m. +00:00

Mais je voudrais quand même savoir pourquoi le programme DailyTimeIntervale ne fonctionne pas ...

35
Bittercoder

Vous ne spécifiez pas l'intervalle qui se trouve par défaut à 1 minute, il suppose donc que vous souhaitez exécuter le travail toutes les minutes.

Essayer

 ITrigger trigger = TriggerBuilder.Create()
    .WithDailyTimeIntervalSchedule
      (s => 
         s.WithIntervalInHours(24)
        .OnEveryDay()
        .StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(13, 0))
      )
    .Build();

La valeur par défaut devrait être de s'exécuter tous les jours, donc le OnEveryDay () n'est pas vraiment nécessaire.

Je ne sais pas pourquoi vous voyez local et UTC, car toutes mes heures sont affichées en UTC.

49
sgmoore

Alors que WithIntervalInHours résoudra probablement cela et qu'un programme similaire à cron est encore plus flexible, je veux partager une autre solution: EndingDailyAfterCount(...)

var trigger = TriggerBuilder.Create()
  .WithDailyTimeIntervalSchedule(s => s
      .OnEveryDay()
      .StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(13, 00)))
      .EndingDailyAfterCount(1))
.Build();
17
Jürgen Steinblock