我想在每天早上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點鐘就觸發,就像我告訴它的那樣?
編輯:這是瘋狂的,它甚至使用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 for 4.0(2.2.400.0) – PMac
根據該問題在GetFireTimeAfter()中存在一個使用本地時間創建觸發日期的錯誤。這似乎是我看到的行爲。這個問題在Quartz.Net 2.1中提到了一個修復,但是我運行的是2.2,所以它可能是這個bug的新變體(或者我可能做錯了什麼)。 – PMac