2009-03-18 20 views
33

सी # में पिछले सप्ताह की शुरुआत और समाप्ति तिथि की गणना करने का सबसे अच्छा तरीका क्या है? अर्थात। आज 18 मार्च का परिणाम 9 मार्च (सोमवार को अंतिम सप्ताह) और 15 मार्च (रविवार को पिछले सप्ताह) होगा।पिछले सप्ताह की शुरुआत और समाप्ति तिथि की गणना करें

मैंने इसे डेटऑफविक के साथ किया है और एक ऑफ़सेट काम करने के लिए एक स्विच स्टेटमेंट देखा है, लेकिन यह सोच रहा था कि क्या एक और शानदार तरीका है।

+0

मुद्रित करने के लिए? –

उत्तर

55

आप जबकि पाश छोड़ सकते हैं और

DateTime mondayOfLastWeek = date.AddDays(-(int)date.DayOfWeek - 6); 

का उपयोग इसका मतलब यह है कि आप सप्ताह के पहले दिन के रूप में सोमवार का उपयोग कर रहे सकते हैं ।

+2

प्रश्न का उत्तर देने के लिए, startOfWeek को sundayOfLastWeek नाम दिया जाना चाहिए। "डेटटाइम mondayOfLastWeek = date.AddDays (- (int) दिनांक। DayOfWeek - 6);" –

+0

सुधार के लिए धन्यवाद ऑस्टिन सैलोनन – bstoney

+4

अच्छा एक लाइनर दृष्टिकोण। मुझे लगता है कि निम्नलिखित पर ध्यान दिए बिना कि किस दिन यह चल रहा है: mondayOfLastWeek = DateTime.Now.AddDays (- (int) DateTime.Now.DayOfWeek - 6); sundayOfLastWeek = DateTime.Now.AddDays (- (int) DateTime.Now.DayOfWeek); – Henryk

22
DayOfWeek weekStart = DayOfWeek.Monday; // or Sunday, or whenever 
DateTime startingDate = DateTime.Today; 

while(startingDate.DayOfWeek != weekStart) 
    startingDate = startingDate.AddDays(-1); 

DateTime previousWeekStart = startingDate.AddDays(-7); 
DateTime previousWeekEnd = startingDate.AddDays(-1); 

पढ़ें: एक समय में एक दिन पीछे जब तक हम इस सप्ताह के शुरू में कर रहे हैं, और फिर घटाना सात पिछले सप्ताह के शुरू करने के लिए।

+0

स्मार्ट !!! एक बहुत ही सरल और आसान तरीका – redDragonzz

3

सप्ताह का दिन का उपयोग करते हुए इस को प्राप्त करने का एक तरीका होगा:

DateTime date = DateTime.Now.AddDays(-7); 
    while (date.DayOfWeek != DayOfWeek.Monday) 
    { 
     date = date.AddDays(-1); 
    } 

    DateTime startDate = date; 
    DateTime endDate = date.AddDays(7); 
0

आप दिनांक समय एक्सटेंशन विधि बना सकते हैं, कि एक सप्ताह का दिन पैरामीटर के साथ इस्तेमाल किया जा सकता: इस प्रकार

public static class DateTimeExtension 
{ 
    public static DateTime GetPreviousWeekDay(this DateTime currentDate, DayOfWeek dow) 
    { 
     int currentDay = (int)currentDate.DayOfWeek, gotoDay = (int)dow; 
     return currentDate.AddDays(-7).AddDays(gotoDay-currentDay); 
    }   
} 

फिर इसका इस्तेमाल:

DateTime testDate = new DateTime(2017, 01, 21); 

Console.WriteLine(testDate.GetPreviousWeekDay(DayOfWeek.Sunday)); 
Console.WriteLine(testDate.GetPreviousWeekDay(DayOfWeek.Saturday)); 
0

स्वीकार्य समाधान वास्तव में सही नहीं है।

आपको सप्ताह "ब्रेक" के दौरान स्विच करना होगा, यानी जब यह सप्ताह को समाप्त या शुरू करने पर विचार करता है, और स्वीकार्य समाधान में सूत्र नहीं है।

यह सोमवार को सप्ताह की शुरुआत में इतनी दिखाई नहीं दे रहा है, लेकिन अधिक यदि आप गुरुवार को सप्ताह के अंत में विचार करेंगे।

सही सूत्र (गुरुवार के लिए दिन समाप्त होने के रूप में) है:

DateTime thu = date.AddDays(-(int)(date.AddDays(-5).DayOfWeek) -1); 

सोमवार के लिए, -5 -2 के लिए स्विच जाएगा।

उदाहरण कोड क्या शुक्रवार को कारोबार की समाप्ति के बाद पिछले सप्ताह काम कर की गणना की जटिलता है, जो तब वर्तमान सप्ताह कि शुक्रवार था लौटना चाहिए के बारे में पता

 String s = ""; 
     DateTime date = new DateTime(2017, 1, 1); 
     for (int i = 0; i < 14; i++) 
     { 
      date = date.AddDays(1); 
      DateTime thu = date.AddDays(-(int)(date.AddDays(-5).DayOfWeek) -1); 
      DateTime mon = date.AddDays(-(int)(date.AddDays(-2).DayOfWeek) -1); 
      s += date.ToString() + " - Thu: " + thu.ToString() + " - Mon: " + mon.ToString() + "\r\n"; 
     } 
     Console.WriteLine(s); 
संबंधित मुद्दे