2009-06-02 10 views
6

शेड्यूलिंग जानकारी के मानक टुकड़े को देखते हुए, जैसे "जून 200 9 में दूसरा मंगलवार" या "जुलाई 200 9 में अंतिम शुक्रवार", उस तारीख में अनुवाद करने के लिए सबसे सरल और सबसे कुशल सूत्र क्या है?महीने के सप्ताह का उपयोग कर तारीख निर्धारित करने के लिए सरल सूत्र?

इनपुट:

  • w = महीने, गणना (1st, 2nd, 3, 4 या अंतिम) के सप्ताह
  • d = सप्ताह का दिन, enum सूर्य शनि
  • के माध्यम से
  • m = महीना, पूर्णांक
  • y = वर्ष, पूर्णांक

संपादित करें (दोबारा) - इससे कोई फर्क नहीं पड़ता कि सप्ताह किस दिन शुरू होता है; मैं डब्ल्यू प्राप्त महीने में डी का उदाहरण प्राप्त करना चाहता हूं। इस प्रकार जून 200 9 में दूसरा रविवार 14 जून है, भले ही वह तकनीकी रूप से जून के तीसरे सप्ताह में गिरता है; इसी तरह जून में पहला रविवार 7 जून है, नल/अपवाद नहीं।

+0

आप अतिरिक्त जानकारी की आवश्यकता होगी - क्या दिन क्या करते "सप्ताह" पर, शनिवार, रविवार, सोमवार या शुरू? उसी सप्ताह के पांच के साथ महीनों के बारे में क्या (कोई "पांचवां?") – mquander

+0

संपादित - सप्ताह रविवार को शुरू होता है। इसे ध्यान में रखें कि हमें "5 वें" सप्ताह की आवश्यकता नहीं है। –

+1

आपके दो उदाहरण प्रश्नों के आधार पर "जून 09 में दूसरा टुडेडे" और आखिरी "शुक्रवार में जुलाई 09", सप्ताह के किसी भी दिन सप्ताह के शुरू होने पर सप्ताह शुरू नहीं होता है? –

उत्तर

8

कुछ की तरह:

static DateTime GetDate(int year, int month, DayOfWeek dayOfWeek, 
     int weekOfMonth) { 
    // TODO: some range checking (>0, for example) 
    DateTime day = new DateTime(year, month, 1); 
    while (day.DayOfWeek != dayOfWeek) day = day.AddDays(1); 
    if (weekOfMonth > 0) { 
     return day.AddDays(7 * (weekOfMonth - 1)); 
    } else { // treat as last 
     DateTime last = day; 
     while ((day = day.AddDays(7)).Month == last.Month) { 
      last = day; 
     } 
     return last; 
    } 
} 
+0

(एक सप्ताह के माध्यम से "आखिरी" को संभालने के लिए संपादित किया गया ओफमोन्थ <= 0) –

+0

फिर से महान जवाब - धन्यवाद मार्क! –

1

बग को ठीक करने के लिए कहा जब काम करने के दिन महीने के पहले की dayof सप्ताह के रूप में ही था संपादित।

2 संपादित करें 'मार्क

static DateTime GetDate(int year, int month, 
       DayOfWeek weekDay, int week) 
{ 
    DateTime first = new DateTime(year, month, 1); 
    int iDow = (int)weekday, iFirst = (int)first.DayOfWeek; 
    int adjust = (7+iDow-iFirst)%7 - 7; 
    return first.AddDays(7*week + adjust); 
} 
+0

क्या यह 7 * (सप्ताह -1) होना चाहिए? फिर भी, उस फॉर्मूला का उपयोग करके, "जून 200 9 का पहला रविवार" 31 मई 200 9 तक आता है। –

+0

अच्छी तरह से, नहीं, क्योंकि दिन के दिन छोटे दिन के मूल्य के साथ सप्ताह के दिन पूछने के दौरान ऐडडे छह दिनों तक घटाएगा 1 सप्ताह के सप्ताह में, लेकिन जब वह दिन के पहले दिन के रूप में पूछा गया था तो वह छोटी थी ... –

+0

संपादन के साथ, जनवरी 200 9 में पहला रविवार सोमवार को 5 वें ... –

0
using System; 

namespace date_using_week_of_month 
{ 

    public class Example 
    { 
     public static DateTime WthDayDOfMonthM(int w, DayOfWeek d, DateTime month) 
     { 
      return first(d, month).AddDays(7 * (w - 1)); 
     } 

     private static DateTime first(DayOfWeek d, DateTime month) 
     { 
      DateTime first = new DateTime(
       month.Year, month.Month, 1); 
      while (first.DayOfWeek != d) 
      { 
       first = first.AddDays(1); 
      } 
      return first; 
     } 
    } 
} 
द्वारा इस मुद्दे को ठीक करने के लिए डिस्क
संबंधित मुद्दे