Я пытаюсь уволить работу каждое утро в 8 утра по UTC. Проблема в том, что триггеры не соблюдают время, о котором я говорю.Quartz.net Создайте ежедневное расписание по времени UTC
Мой код выглядит следующим образом:
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);
Выход:
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
Причина в час меняется на 6, что переход на летнее время начинается здесь в эти выходные.
Как мне заставить его запускать только в 8:00 UTC, как я говорю?
Edit: Это безумие, он даже делает это с графиком 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);
Выход:
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
Какая версия quartz.net вы используете? Может быть, это сообщение связано с вашей проблемой? http://stackoverflow.com/questions/15661268/quartz-net-using-understanding-cron-based-trigger-and-time-zone-summertime-da –
Quartz.Net 2.2 для 4.0 (2.2.400.0) – PMac
Согласно в этом вопросе была ошибка в GetFireTimeAfter(), которая использовала местное время для создания дат триггера. Это похоже на то поведение, которое я вижу. В этом вопросе упоминается исправление в Quartz.Net 2.1, но я запускаю 2.2, так что это может быть новая вариация на эту ошибку (или я мог бы что-то сделать не так). – PMac