2011-05-26 27 views
5

संभव डुप्लिकेट सी # में माह के 2 रे शुक्रवार की गणना करने के:
How to find the 3rd Friday in a month with C#?कैसे

हाय सब लोग,

मैं एक छोटे से सांत्वना उपयोगिता है कि एक लाइन बाहर थूक लिखा गया है एक पाठ फ़ाइल में। मैं चाहता हूं कि इस लाइन को चालू महीने के दूसरे शुक्रवार को शामिल किया जाए। क्या इसे करने का कोई तरीका है?

सभी को धन्यवाद!

+1

सवाल मैं से जुड़ा हुआ मूलतः एक ही समस्या है। बस 'yourDate' को' डेटटाइम.अब 'के साथ बदलें और 15 के साथ 15 को बदलें। – Brandon

+0

मैंने इसे देखा। क्या यह वास्तव में मजबूत है? –

+0

हां, यह –

उत्तर

10

मामूली बदलाव @druttka पर: एक विस्तार पद्धति का उपयोग करके।

public static DateTime NthOf(this DateTime CurDate, int Occurrence , DayOfWeek Day) 
{ 
    var fday = new DateTime(CurDate.Year, CurDate.Month, 1); 

    var fOc = fday.DayOfWeek == Day ? fday : fday.AddDays(Day - fday.DayOfWeek); 
    // CurDate = 2011.10.1 Occurance = 1, Day = Friday >> 2011.09.30 FIX. 
    if (fOc.Month < CurDate.Month) Occurrence = Occurrence+1; 
    return fOc.AddDays(7 * (Occurrence - 1)); 
} 

तो इस तरह यह कहा जाता है:

for (int i = 1; i < 13; i++) 
{ 
     Console.WriteLine(new DateTime(2011, i,1).NthOf(2, DayOfWeek.Friday)); 
} 
+0

+1 लेकिन आईएमओ 'fOc' खराब चर नाम है। मुझे सोचना था कि धरती पर क्या चल रहा है? मुझे मिल गया लेकिन यह कुछ सेकंड बर्बाद हो गया। चूंकि हम इसे लिखने से अधिक कोड पढ़ते हैं, मुझे लगता है कि इसे स्पेल करना बेहतर है। – User

+0

संभावित बग: जैसा दिखता है (fOc.Month User

0

अनचाहे, लेकिन इसे इसे पकड़ना चाहिए।

DateTime today = DateTime.Today; 
DateTime secondFriday = 
    Enumerable.Range(8, 7) 
       .Select(item => new DateTime(today.Year, today.Month, item)) 
       .Where(date => date.DayOfWeek == DayOfWeek.Friday) 
       .Single(); 
0

मैं इस तरह कुछ के लिए जाऊंगा।

public static DateTime SecondFriday(DateTime currentMonth) 
    { 
     var day = new DateTime(currentMonth.Year, currentMonth.Month, 1); 
     day = FindNext(DayOfWeek.Friday, day); 
     day = FindNext(DayOfWeek.Friday, day.AddDays(1)); 
     return day; 
    } 

    private static DateTime FindNext(DayOfWeek dayOfWeek, DateTime after) 
    { 
     DateTime day = after; 
     while (day.DayOfWeek != dayOfWeek) day = day.AddDays(1); 
     return day; 
    } 
0

पूरी तरह से परीक्षण:

for (int mo = 1; mo <= 12; mo++) 
{ 
    DateTime _date = new DateTime(yr, mo, 1); 
    DayOfWeek day = _date.DayOfWeek; 

    int d = 0; 
    if (day == DayOfWeek.Saturday) 
     d += 7; 

    var diff = DayOfWeek.Friday - day; 

    DateTime secFriday = _date.AddDays(diff + 7 + d); 
    Console.WriteLine(secFriday.ToString("MM\tddd\tdd")); 
} 

अंतिम परिणाम:

Month   Date 
===================== 
01  Fri  14 
02  Fri  11 
03  Fri  11 
04  Fri  08 
05  Fri  13 
06  Fri  10 
07  Fri  08 
08  Fri  12 
09  Fri  09 
10  Fri  14 
11  Fri  11 
12  Fri  09