Próbuję strzelać z pracy każdego ranka o 8:00 czasu UTC. Problem polega na tym, że wyzwalacze nie respektują czasu, który im opowiadam.Quartz.net Twórz codzienny harmonogram w czasie UTC
Mój kod wygląda następująco:
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);
Wyjście jest:
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
Powodem zmiany godziny na 6 jest to, że czas letni zaczyna się tutaj w ten weekend.
W jaki sposób mogę go uruchomić po 8:00 czasu UTC, tak jak mówię?
Edit: To szaleństwo, to jeszcze robi to z harmonogramem Cron:
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);
wyjściowa:
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
Którą wersję quartz.net używasz? Może ten wpis jest związany z Twoim problemem? http://stackoverflow.com/questions/15661268/quartz-net-using-understanding-cron-based-trigger-and-time-zone-summertime-da –
Quartz.Net 2.2 for 4.0 (2.2.400.0) – PMac
Według to pytanie zawierało błąd w GetFireTimeAfter(), który wykorzystywał czas lokalny do tworzenia dat wyzwalaczy. To wydaje się być zachowanie, które widzę. To pytanie wspomina o poprawce w Quartz.Net 2.1, ale używam wersji 2.2, więc może to być nowa wersja tego błędu (lub mógłbym coś zrobić źle). – PMac