यदि कोई खाता 30 दिनों से कम समय में समाप्त होता है, तो मैं काम करने की कोशिश कर रहा हूं। क्या मैं DateTime की तुलना सही ढंग से कर रहा हूं?
if (DateTime.Compare(expiryDate, now) < 30)
{
matchFound = true;
}
यदि कोई खाता 30 दिनों से कम समय में समाप्त होता है, तो मैं काम करने की कोशिश कर रहा हूं। क्या मैं DateTime की तुलना सही ढंग से कर रहा हूं?
if (DateTime.Compare(expiryDate, now) < 30)
{
matchFound = true;
}
जवाबों:
क्या मैं DateTime की तुलना सही ढंग से कर रहा हूं?
नहीं, Compareकेवल दो तिथियों की सापेक्ष स्थिति के बारे में जानकारी प्रदान करता है: कम, बराबर या अधिक। आप जो चाहते हैं वह कुछ इस तरह है:
if ((expiryDate - DateTime.Now).TotalDays < 30)
matchFound = true;
यह दो DateTimeएस घटाता है । परिणाम एक TimeSpanवस्तु है जिसमें एक TotalDaysसंपत्ति है।
इसके अतिरिक्त, सशर्त को सीधे रूप में लिखा जा सकता है:
matchFound = (expiryDate - DateTime.Now).TotalDays < 30;
कोई ifजरूरत नहीं ।
Daysसबसे बड़ा घटक है TimeSpan। इसे पढ़ने वाले लोग यह अनुमान लगा सकते हैं कि यह सोचने के लिए कि Secondsसंपत्ति उसी तरह से काम करती है।
Daysखुद भी गलत हो सकता है। Daysऔर TotalDaysयहां केवल वही हैं क्योंकि स्थिति है < 30, लेकिन अगर यह था <= 30, तो एक स्पष्ट अंतर होगा , क्योंकि TotalDaysरिटर्न 30.421करते समय ऐसा कुछ हो सकता Daysहै 30।
होना चाहिए
matchFound = (expiryDate - DateTime.Now).TotalDays < 30;
कुल दिनों पर ध्यान दें अन्यथा आपको वरीद व्यवहार मिलेगा
TotalDaysका उपयोग करने के लिए वैचारिक रूप से सही क्षेत्र है। व्यवहार में वे एक ही परिणाम देते हैं लेकिन केवल इसलिए Daysकि सबसे बड़ा घटक है TimeSpan, एक महीने या वर्षों का घटक था और यह एक अलग कहानी होगी। बस के साथ प्रयास करें Hours, Secondsया Millisecondsयह देखने के लिए कि वे कैसे काम करते हैं।
इसके बजाय यह प्रयास करें
if ( (expiryDate - DateTime.Now ).TotalDays < 30 ) {
matchFound = true;
}
यह आपको सटीक परिणाम देगा:
if ((expiryDate.Date - DateTime.Now.Date).Days < 30)
matchFound = true;
तुलना अनावश्यक है, दिन / TotalDays अनावश्यक हैं।
जो तुम्हे चाहिए वो है
if (expireDate < DateTime.Now) {
// has expired
} else {
// not expired
}
ध्यान दें कि यह तब काम करेगा जब आप अपने एक्सपायरी मापदंड के रूप में मिनटों या महीनों या वर्षों का उपयोग करने का निर्णय लेते हैं।
यदि आप false(यदि लागू हो) असाइन करना चाहते हैं, तो matchtimeइसे लिखने का एक सरल तरीका होगा।
matchtime = ((expiryDate - DateTime.Now).TotalDays < 30);
नहीं, तुलना फ़ंक्शन 1, 0, या -1 पर वापस आ जाएगा। 0 जब दो मान समान होते हैं, -1 और 1 का मतलब इससे कम और अधिक होता है, तो मैं उस क्रम में विश्वास करता हूं, लेकिन मैं अक्सर उन्हें मिलाता हूं।
नहीं, आप इसका सही उपयोग नहीं कर रहे हैं।
देखें यहाँ जानकारी के लिए।
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");
वास्तव में इनमें से किसी भी उत्तर ने मेरे लिए काम नहीं किया। मैंने इसे इस तरह से हल किया:
if ((expireDate.Date - DateTime.Now).Days > -30)
{
matchFound = true;
}
जब मैंने ऐसा करने की कोशिश की:
matchFound = (expiryDate - DateTime.Now).Days < 30;
आज, 2011-11-14 और मेरी एक्सपायरी डेट 2011-10-17 थी, मुझे वह मैचफाउंड = -28 मिला। 28 के बजाय। इसलिए मैंने आखिरी चेक का इस्तेमाल किया।
// 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;
}
}