2010-04-21 8 views
9

2 समय अवधिसी # TimeSpan के अंदर सप्ताह के दिनों के माध्यम से लूपिंग कक्षा

DateTime start = new DateTime(2010, 1, 1); 
    DateTime end = new DateTime(2011, 12, 12); 

मैं का उपयोग कर इन दिनांकों के बीच दिनों की संख्या प्राप्त करने में कामयाब रहे के बीच सप्ताह DAYof प्रत्येक लूप करने के लिए कोशिश कर रहा हूँ निम्नलिखित कोड

 TimeSpan range = (end - start); 
बाहर बारी 710

मैं अब सप्ताह के दिनों में प्रत्येक माह के लिए प्राप्त करने के लिए देख रहा हूँ होने के लिए

,

0,123,

उदाहरण के लिए

जनवरी 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 171 18 1 9 20। । ।

मिलान

एम टी डब्ल्यू टी एफ एस एस एम टी डब्ल्यू टी एफ एस एस एम

साथ

मैं समझता हूँ कि सी # जो सप्ताह मेरी समस्या ऊपर करने के लिए एक पाश निर्माण कर रही है की दिन हो जाता है दिनांक समय वर्ग सप्ताह का दिन से एक संपत्ति है?

कोई भी?

+1

फास्ट तरीका: के लिए (DATETIME तारीख = http://stackoverflow.com/questions/22258070/datetime-dayofweek-micro-optimization – rpax

उत्तर

20

यह प्रारंभ तिथि से लेकर अंतिम तिथि तक सभी दिनों के माध्यम से लूप करेगा और प्रत्येक के लिए सप्ताह का दिन प्राप्त करेगा।

DateTime startDate = new DateTime(2010, 1, 1); 
DateTime endDate = new DateTime(2011, 12, 12); 
for (DateTime date = startDate; date <= endDate; date = date.AddDays(1)) 
{ 
    DayOfWeek dw = date.DayOfWeek; 
    // ... 
} 

जब तक आप अनुकूलन के बारे में वास्तव में चिंतित हैं, मैं कुछ भी और अधिक जटिल के लिए वसंत नहीं होगा।

+0

STARTDATE; तिथि <= ENDDATE; तिथि = तिथि। अतिरिक्त दिन (1)) { DayOfWeek dw = date.DayOfWeek; // ... } बहुत बहुत धन्यवाद, यह सराहना :) – Calibre2010

+0

अगर वह अनुकूलन के बारे में वास्तव में चिंतित है, वह http://stackoverflow.com/questions/22258070/datetime-dayofweek-micro को एक बार देख ले सकते हैं - अनुकूलन। यह मजाकिया है – rpax

+0

लाइब्रेरी विधि के लिए एक कस्टम (और शायद छोटी गाड़ी) फ़ंक्शन को प्रतिस्थापित करने में कठिनाई का सामना करना पड़ता है, खासकर जब यह बिग-ओ जटिलता को भी परिवर्तित नहीं करता है। और फिर, यदि आप * वास्तव में * कड़े प्रदर्शन बाधाओं के तहत परिचालन कर रहे हैं - तो आप पूरी गणना पूरी तरह से पूरी तरह से बच सकते हैं और एक साधारण परीक्षण स्थिति के साथ केवल 1 से 7 तक लूप कर सकते हैं। मैं ऊपर की विधि पसंद करता हूं क्योंकि इसे पढ़ने/समझना आसान है, जो 10 में से 9 बार आपका लक्ष्य होना चाहिए। – Aaronaught

3

मैं निम्नलिखित की तरह:

static IEnumerable Days(DateTime start, DateTime end) 
{ 
    while (start < end) 
    { 
     string day = start.ToString("ddd"); 

     start = start.AddDays(1); 

     yield return day; 
    } 
} 

यह उपयोग कैसे करें:

foreach(string s in Days(new DateTime(2010, 1, 1), new DateTime(2010, 2, 1))) 
{ 
    Console.WriteLine(s); 
} 

आप विभिन्न प्रकार के वापस जाने के लिए निश्चित रूप से, इसे संशोधित कर सकते हैं।

2

LINQ का उपयोग करना:

DateTime start = new DateTime(2010, 1, 1); 
DateTime end = new DateTime(2011, 12, 12); 
int days = (end - start).Days; 

Enumerable 
    .Range(0, days) 
    .Select(x => start.AddDays(x)) 
    .ToList() 
    .ForEach(d => 
    { 
     DayOfWeek dayOfWeek = d.DayOfWeek; 
     // do what you want 
    }); 
+0

अच्छा समाधान :) –

संबंधित मुद्दे