2011-07-13 12 views
17

के बीच मिनट अंतर बाहर काम मैं निम्नलिखित कोड है:दिनांकों

DateTime pickerDate = Convert.ToDateTime(pickerWakeupDate.SelectedDate); 
string enteredStr = pickerDate.ToShortDateString() + " " + textWakeupTime.Text; 
string format = "dd/M/yyyy HH:mm"; 
DateTime enteredDate = DateTime.ParseExact(enteredStr, format, null); 

समस्या का सामना करना पड़ रहा हूँ कि मैं कसरत करने के लिए अब निर्धारित तिथि और तारीख और समय के बीच अंतर चाहते हैं। इस मूल्य को मुझे मूल्य प्रदान करने की आवश्यकता होगी कि तिथियों के बीच कितने मिनट हैं।

मैं उपयोग करने की कोशिश:

DateTime todaysDateTime = DateTime.Now; 
TimeSpan span = enteredDate.Subtract(todaysDateTime); 
int totalMins = span.Minutes; 

लेकिन यह मुझे एक गलत मान 0 दिया जब मूल्य 10 मिनट आगे स्थापित किया गया था।

क्या कोई मुझे इस

को हल करने में मेरी सहायता कर सकता है।

+0

इस बात की पुष्टि करेंगे enteredDate क्या आपको लगे कि यह है कि है। कोड के दूसरे ब्लॉक को इस उदाहरण में काम करना चाहिए। आप अभी भी टोटलमिन्यूट्स का उपयोग करना चाहते हैं क्योंकि 1hr 1min जैसे कुछ मिनटों के लिए "1" वापस आ जाएंगे जो लगभग निश्चित रूप से नहीं चाहते हैं, लेकिन यह समस्या नहीं है जिसे आपने यहां रखा है। – heisenberg

उत्तर

28

मुझे लगता है कि क्या आप वास्तव में चाहते हैं span.TotalMinutes है (मैं तुम्हें नहीं कर सकते बता कितनी बार यह मेरे TimeSpan वर्ग पर बाहर पकड़ा गया!)

संदर्भ

लिए

TimeSpan.Minutes - "के मिनट घटक हो जाता है समय अंतराल वर्तमान टाइमस्पैन संरचना द्वारा प्रतिनिधित्व किया। "

TimeSpan.TotalMinutes - "वर्तमान और समय-सारिणी मिनटों में व्यक्त वर्तमान टाइमस्पैन संरचना का मान प्राप्त करता है।"

+0

कुल मिनट एक था! इसके लिए धन्यवाद, इतनी सरल गलती। –

+0

@ संदीप - मेरा विश्वास करो कि आप अकेले नहीं हैं। मैंने हाल ही में इस सप्ताह के रूप में एक ही गलती की है! – Jamiec

+0

@ संदीप दिलचस्प है, क्योंकि कुल मिलाकर आपके द्वारा वर्णित समस्या के लिए कुल मिनट और मिनट दोनों को 10 और 0 वापस नहीं करना चाहिए। (10 मिनट का टाइमस्पेन) – heisenberg

0

मैं आप इसे बेहतर बना सकते हैं एक विस्तार यह मिनट से अधिक हल का प्रयास करें:

public enum eTimeFragment 
    { 
     hours, 
     minutes, 
     seconds, 
     milliseconds 
    } 


public static long DiferenceIn(this DateTime dtOrg, DateTime Diff, eTimeFragment etf = eTimeFragment.minutes) 
     { 

      long InTicks = 1; 
      switch (etf) 
      { 
       case eTimeFragment.hours: 
        InTicks = DateTime.MinValue.AddHours(1).Ticks; 
        break; 
       case eTimeFragment.seconds: 
        InTicks = DateTime.MinValue.AddSeconds(1).Ticks; 
        break; 
       case eTimeFragment.milliseconds: 
        InTicks = DateTime.MinValue.AddMilliseconds(1).Ticks; 
        break; 
       case eTimeFragment.minutes: 
       default: 
        InTicks = DateTime.MinValue.AddMinutes(1).Ticks; 
        break; 
      } 

      if (dtOrg > Diff) 
       return dtOrg.AddTicks(Diff.Ticks * -1).Ticks/InTicks; 
      else 
       return Diff.AddTicks(dtOrg.Ticks * -1).Ticks/InTicks; 

     } 

डिबग कंसोल में यह उदाहरण का उपयोग करना,:

DateTime fromDate = DateTime.Now; 
    //Default is Minutes fragment 
    fromDate.DiferenceIn(fromDate.AddHours(4)) 
    240 
    fromDate.DiferenceIn(fromDate.AddHours(50)) 
    3000 
    fromDate.DiferenceIn(fromDate.AddDays(1)) 
    1440 
    fromDate.DiferenceIn(fromDate.AddDays(1),WGTS_Extensions.eTimeFragment.hours) 
    24 
    fromDate.DiferenceIn(fromDate.AddDays(1),WGTS_Extensions.eTimeFragment.seconds) 
    86400 
    fromDate.DiferenceIn(fromDate.AddHours(1),WGTS_Extensions.eTimeFragment.seconds) 
    3600 
संबंधित मुद्दे