2009-02-09 5 views
65

यदि कोई खाता 30 दिनों से कम समय में समाप्त हो जाता है तो मैं काम करने की कोशिश कर रहा हूं। क्या मैं डेटटाइम का सही ढंग से तुलना कर रहा हूं?डेटटाइम। यह जांचें कि दिनांक 30 दिन से कम पुराना है या नहीं?

if (DateTime.Compare(expiryDate, now) < 30) 

{ 
    matchFound = true; 
} 

उत्तर

179

क्या मैं डेटटाइम का उपयोग कर सही ढंग से तुलना कर रहा हूं?

सं। Compare केवल दो तिथियों की सापेक्ष स्थिति के बारे में जानकारी प्रदान करता है: कम, बराबर या अधिक।

if ((expiryDate - DateTime.Now).TotalDays < 30) 
    matchFound = true; 

यह घटा दो DateTime रों: क्या आप चाहते हैं कुछ इस तरह है। परिणाम TimeSpan ऑब्जेक्ट है जिसमें TotalDays संपत्ति है।

matchFound = (expiryDate - DateTime.Now).TotalDays < 30; 

नहीं if की जरूरत:

साथ ही, सशर्त के रूप में प्रत्यक्ष रूप से लिखा जा सकता है।

+2

आप 2 + देने की अनुमति दी जानी चाहिए और इसे – CheGueVerra

+4

उह व्यक्त करने के संक्षिप्त तरीके के लिए एक ... मैंने अभी अपना जवाब लंबा बना दिया है, इसलिए एक काल्पनिक वोट घटाएं। ;-) –

+1

कृपया दिनों के बजाय ['TotalDays'] (http://msdn.microsoft.com/en-us/library/system.timespan.totaldays.aspx) का उपयोग करें। –

0

नहीं, तुलना फ़ंक्शन या तो 1, 0, या -1 लौटाएगा। 0 जब दो मान बराबर होते हैं, -1 और 1 का अर्थ उससे कम और उससे अधिक होता है, तो मैं उस क्रम में विश्वास करता हूं, लेकिन मैं अक्सर उन्हें मिश्रण करता हूं।

0

नहीं, आप इसे सही तरीके से उपयोग नहीं कर रहे हैं।

विवरण के लिए here देखें।

DateTime t1 = new DateTime(100); 
DateTime t2 = new DateTime(20); 

if (DateTime.Compare(t1, t2) > 0) Console.WriteLine("t1 > t2"); 
if (DateTime.Compare(t1, t2) == 0) Console.WriteLine("t1 == t2"); 
if (DateTime.Compare(t1, t2) < 0) Console.WriteLine("t1 < t2"); 
5

इस बजाय

if ((expiryDate - DateTime.Now).TotalDays < 30) { 
    matchFound = true; 
} 
+1

हम्म, आपको या तो अपनी तिथियों के क्रम को उलटा करने या पूर्ण मूल्य लेने की आवश्यकता है, जब तक कि समाप्ति तिथि पहले से ही पारित न हो जाए। –

+0

@ कोनराड, हाँ, मैंने गलत सवाल पढ़ा। – JaredPar

0

क्या आप क्या करना चाहते दो datetimes (expiryDate और DateTime.Now) घटाना है की कोशिश करो। यह टाइमस्पेन प्रकार का ऑब्जेक्ट लौटाएगा। टाइमस्पैन में संपत्ति "दिन" है। अपने उत्तर के लिए उस नंबर की तुलना 30 पर करें।

0

नहीं यह सही नहीं है, इस प्रयास करें:

DateTime expiryDate = DateTime.Now.AddDays(-31); 
if (DateTime.Compare(expiryDate, DateTime.Now.AddDays(-30)) < 1) 
{ 
    matchFound = true; 
} 
3

रिटर्न 1, 0, से अधिक है, के बराबर है, कम से कम, के लिए क्रमश: -1 की तुलना करें।

आप चाहते हैं:

if (DateTime.Compare(expiryDate, DateTime.Now.AddDays(30)) <= 0) 
    { 
     bool matchFound = true; 
    } 
6

खैर मैं इसे इस तरह के बजाय करना होगा:

TimeSpan diff = expiryDate - DateTime.Today; 
if (diff.Days > 30) 
    matchFound = true; 

तुलना केवल एक पूर्णांक का संकेत मौसम के साथ प्रतिक्रिया पहले पहले हो, एक ही या बाद में ...

12

होना चाहिए

matchFound = (expiryDate - DateTime.Now).TotalDays < 30; 

टिप्पणी कुल दिनों अन्यथा आप werid व्यवहार मिलेगा

+0

सही उत्तर स्वीकृत उत्तर के अंतिम संपादन के एक साल बाद यह उत्तर था! –

+0

@ मिच - यह सही जवाब है, ध्यान दें कि वह दिन के बजाय कुलदेय का उपयोग कर रहा है। –

+0

स्वीकृत उत्तर सही है। कुल दिन एक अंशकालिक भाग भी देता है, जो एक पूर्णांक की तुलना करते समय अनावश्यक है। –

1

यह आपको सही परिणाम दे देंगे:

if ((expiryDate.Date - DateTime.Now.Date).Days < 30) 
    matchFound = true; 
+0

वास्तव में क्या होता है उदाहरण के लिए होता है eg.expryDte 28/4/2011 है यदि यू अनुष्ठान (समाप्ति तिथि-दिनांक।अब) इसमें समय भी लगेगा (28/4/2011 12:00:00 पूर्वाह्न - 26/4/2011 11:47:00 पूर्वाह्न) और ऊपर कोड 28/4/2011 12:00:00 के रूप में मूल्य लेता है AM -26/4/2011 12:00:00 पूर्वाह्न जो बीमार सही अंतर देते हैं। – Jayant

1

, की तुलना करें अनावश्यक है दिन/कुल दिन अनावश्यक हैं।

आपको बस

if (expireDate < DateTime.Now) { 
    // has expired 
} else { 
    // not expired 
} 

टिप्पणी अगर तुम मिनट या महीनों या अपने समाप्ति मापदंड के रूप में भी साल उपयोग करने का निर्णय इस काम करेगा।

+0

कोई अच्छा जवाब नहीं है क्योंकि अब आप घंटों, मिनट और सेकंड में भी फैक्टरिंग कर रहे हैं। डेटटाइम। ओपीएस स्थिति के लिए आज और अधिक सही होगा। –

0

वास्तव में इनमें से कोई भी जवाब मेरे लिए काम नहीं करता है। मैं इस तरह करने से इसे हल:

if ((expireDate.Date - DateTime.Now).Days > -30) 
    { 
    matchFound = true; 
    } 

जब मैं यह कर की कोशिश की:

matchFound = (expiryDate - DateTime.Now).Days < 30; 

आज, 2011-11-14 और मेरे expiryDate 2011-10-17 मुझे मिल गया था कि matchFound = - 28। 28 के बजाय। इसलिए मैंने अंतिम चेक उलटा। जवाब के लिए) एक;

0
// this isn't set up for good processing. 
//I don't know what data set has the expiration 
//dates of your accounts. I assume a list. 
// matchfound is a single variablethat returns true if any 1 record is expired. 

bool matchFound = false; 
      DateTime dateOfExpiration = DateTime.Today.AddDays(-30); 
      List<DateTime> accountExpireDates = new List<DateTime>(); 
      foreach (DateTime date in accountExpireDates) 
      { 
       if (DateTime.Compare(dateOfExpiration, date) != -1) 
       { 
        matchFound = true; 
      } 
      } 
+1

क्या यह थोड़ा जटिल नहीं है? – Max

+0

प्रश्न में accountExpireDates का उल्लेख कहां है? आप एक खराब समाधान चिपकाया कॉपी। मैचफउंड लगभग लगता है जैसे आप पैटर्न या RegEx मिश्रण कर रहे हैं। बीटीडब्ल्यू, एक मैच मिलने पर आपको तोड़ने की ज़रूरत है या यह लूप जारी है। इसके अलावा अगर यह -2 है? एमएसडीएन यह नहीं कहता कि संभावित मान -1, 0 और 1 हैं। – Mukus

0

.. मान लिया जाये कि आप false आवंटित करने के लिए (यदि लागू हो) matchtime, लेखन यह होगा की एक सरल तरीके से करना चाहते हैं

matchtime = ((expiryDate - DateTime.Now).TotalDays < 30) ? true : false; 
संबंधित मुद्दे