2013-09-29 24 views
5

Her sabah 08:00, UTC zamanlarında bir iş yapmaya çalışıyorum. Sorun, tetikleyicilerin söylediklerime saygı duymamaları. aşağıdaki gibiQuartz.net UTC zaman dilimi hakkında günlük zaman çizelgesi oluşturma

Benim kodudur:

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

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

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

çıktısı: 6 Mayıs'ta saat değişiklikleri

30/09/2013 10:00:00 PM 
1/10/2013 10:00:00 PM 
2/10/2013 10:00:00 PM 
3/10/2013 10:00:00 PM 
4/10/2013 10:00:00 PM 
5/10/2013 10:00:00 PM 
6/10/2013 9:00:00 PM 
7/10/2013 9:00:00 PM 
8/10/2013 9:00:00 PM 
9/10/2013 9:00:00 PM 

nedeni yaz saati burada bu hafta sonu başlıyor olmasıdır.

Bunu anlattığım gibi 8AM UTC saatinde tetiklemeye nasıl başlarım?

Düzenleme: Bu hatta Cron programına yapar, çılgın:

ITrigger trigger = TriggerBuilder.Create() 
    .WithCronSchedule("0 0 8 * * ?") 
    .Build(); 

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

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

Çıktı:

30/09/2013 10:00:00 PM 
1/10/2013 10:00:00 PM 
2/10/2013 10:00:00 PM 
3/10/2013 10:00:00 PM 
4/10/2013 10:00:00 PM 
5/10/2013 9:00:00 PM 
6/10/2013 9:00:00 PM 
7/10/2013 9:00:00 PM 
8/10/2013 9:00:00 PM 
9/10/2013 9:00:00 PM 
+0

kullandığınız quartz.net hangi sürümünü: Sadece çalışmasını gerçekleştirebilir? Belki bu yazı sorununuzla ilgili? http://stackoverflow.com/questions/15661268/quartz-net-using-understanding-cron-based-trigger-and-time-zone-summertime-da –

+0

Quartz.Net 2.2 for 4.0 (2.2.400.0) – PMac

+0

Bu soru, tetikleme tarihleri ​​oluşturmak için yerel saati kullanan GetFireTimeAfter() dosyasında bir hata oluştu. Gördüğüm davranış bu gibi görünüyor. Bu soru Quartz.Net 2.1'de bir düzeltmeden bahsediyor, ancak 2.2 çalıştırıyorum, bu yüzden bu hata üzerinde yeni bir değişiklik olabilir (ya da yanlış bir şey yapıyorum). – PMac

cevap

15

kaynak kodunu aşağı çekerek ve karıştırmaya sonra buldum bir çözümlerin bir çift.

Başlangıçta bir çözüm şöyle bulundu:

var trigger4 = new DailyTimeIntervalTriggerImpl 
{ 
    StartTimeUtc = DateTime.UtcNow, 
    StartTimeOfDay = new TimeOfDay(8, 0, 0), 
    RepeatIntervalUnit = IntervalUnit.Hour, 
    RepeatInterval = 24, 
    TimeZone = TimeZoneInfo.Utc 
}; 

... benim orijinal kodu ayarlamak için yol açan:

ITrigger trigger2 = TriggerBuilder.Create() 
    .WithDailyTimeIntervalSchedule(
     s => s.WithIntervalInHours(24) 
      .StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(8, 0)) 
      .InTimeZone(TimeZoneInfo.Utc)) 
    .Build(); 

Bunların her ikisi de ver Peşinde olduğum şey. Keşke bu kütüphane için iyi bir dokümantasyon var.

1

Bu eski olmasına rağmen, yine de burada cevaplayacağım.

ITrigger trigger = TriggerBuilder.Create() .WithCronSchedule("0 0 8 * * ?", cron => { cron.InTimeZone(TimeZoneInfo.Utc); }) .Build();