2012-10-04 38 views
32

मैं Quartz.Net में एक दोहराई जाने वाली दैनिक कार्यक्रम बनाने की कोशिश कर रहा हूँ 1 मिनट हासिल नहीं करता बनाने लेकिन करने के लिए कैसे में कुछ मुद्दों कर:Quartz.Net एक दैनिक कार्यक्रम है कि प्रति दिन

सबसे पहले, मैं एक दैनिक का निर्माण अनुसूची, 12:45 पर repating इस तरह Quartz.Net कोड का उपयोग करना:

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); 

यह न्यूजीलैंड, डीएसटी में क्रियान्वित किया जा रहा है (इसलिए UTC + 13: 00)

और उत्पादन मैं मिलता है बल्कि अजीब:

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 

पहली तारीख/समय स्थानीय टाइमज़ोन का उपयोग करके प्रदर्शित किया जाता है, तो शेष यूटीसी के साथ प्रदर्शित होते हैं, और प्रत्येक बार मान 1 मिनट तक बढ़ाया जाता है, और तिथि कभी भी नहीं बदली जाती है।

मुझे लगता है कि मुझे दैनिक समय अंतराल अनुसूची के साथ कुछ मौलिक याद आ रही है, लेकिन मुझे नहीं पता कि यह क्या है?

संपादित

ऐसा करने के लिए एक अद्यतन के रूप में, मैं अब एक क्रॉन अभिव्यक्ति आधारित ट्रिगर का उपयोग में बदला गया है:

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

और यह मुझे परिणाम मैं उम्मीद करेंगे दिया:

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 

लेकिन मैं अभी भी जानना चाहूंगा कि DailyTimeIntervale शेड्यूल क्यों काम नहीं कर रहा है ...

+11

TriggerUtils.ComputeFireTimes - भयानक! –

उत्तर

43

आप अंतराल को निर्दिष्ट नहीं कर रहे हैं जो डिफ़ॉल्ट रूप से 1 मिनट तक होता है, इसलिए यह मानता है कि आप हर मिनट नौकरी चलाने के लिए चाहते हैं।

प्रयास करें

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

डिफ़ॉल्ट, हर दिन चलाने के लिए तो OnEveryDay() वास्तव में जरूरत नहीं है होना चाहिए।

सुनिश्चित नहीं है कि आप स्थानीय और यूटीसी क्यों देख रहे हैं, क्योंकि मेरे सभी समय यूटीसी में प्रदर्शित होते हैं।

+2

डेलाइट सेविंग टाइम के साथ कोई समस्या नहीं होगी? (देखें [यहां] (http://www.timeanddate.com/time/change/usa/los-angeles)) – dmigo

+0

मेरे पास इसके लिए और सवाल है, अगर मैं रोजाना शुरू करना चाहता हूं और दो बार 12 बजे और 12 बजे , मैं वह कैसे करता हूं? –

+0

@ NguyễnHuy। मुझे लगता है कि 'ITrigger ट्रिगर = TriggerBuilder.Create() .WithDailyTimeIntervalSchedule (रों => s.WithIntervalInHours (12)) .Build();' या 'ITrigger ट्रिगर = TriggerBuilder.Create() .WithDailyTimeIntervalSchedule (रों => s.WithIntervalInHours (12) .OnEveryDay() .StartingDailyAt (TimeOfDay.HourAndMinuteOfDay (0, 0)) ) .Build(); ' – sgmoore

15

जबकि WithIntervalInHours शायद इस का समाधान होगा और समय की तरह एक क्रॉन भी अधिक लचीला है, मैं एक और समाधान साझा करना चाहते हैं: EndingDailyAfterCount(...)

var trigger = TriggerBuilder.Create() 
    .WithDailyTimeIntervalSchedule(s => s 
     .OnEveryDay() 
     .StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(13, 00))) 
     .EndingDailyAfterCount(1)) 
.Build(); 
+1

अच्छा ... यह भी वास्तव में सुरुचिपूर्ण तरीके से डीएसटी समस्या के आसपास हो जाता है! –

+0

@AndreasNiedermair Glad मैं केवल अपने व्यक्तिगत ज्ञान के लिए मदद कर सकता हूं: क्या quartz.net के क्रॉन शेड्यूल की तरह कोई डीएसटी समस्या है? –

+0

आह, जहां तक ​​मुझे याद है: आंतरिक समय यूटीसी में संग्रहीत है, इसलिए पूरी तरह से डीएसटी के लिए अज्ञेयवादी - शायद आपको संबंधित यूटीसी टाइमस्टैम्प में परिवर्तन को प्रतिबिंबित करने के लिए डीएसटी परिवर्तन के बाद नौकरियों को फिर से निर्धारित करना होगा ... (लेकिन मैं नहीं ' टी को जानने के लिए - भविष्य में - क्रॉन अभिव्यक्ति जोड़ने के दौरान ट्रिगर्स जोड़े जाते हैं, या यदि उन्हें फ्लाई पर मूल्यांकन किया जाता है) –