2010-10-16 16 views
5

मुझे आश्चर्य है कि दो डेटटाइम ऑब्जेक्ट्स की तुलना दिनांक .NET में दिनांकटाइम विधियों Compare, CompareTo या Equals का उपयोग किए बिना करें।दो डेटाटाइम्स की तुलना कैसे करें

मुझे केवल मिलीसेकंड या सेकेंड का सहिष्णुता स्तर चाहिए।

यह कैसे किया जा सकता है?

उत्तर

9

आप DateTime को दूसरे से TimeSpan उत्पन्न करने के लिए घटा सकते हैं जो उनके बीच के समय-अंतर का प्रतिनिधित्व करता है। फिर आप परीक्षण कर सकते हैं कि इस अवधि के पूर्ण मूल्य आपकी वांछित सहनशीलता के भीतर है।

bool dtsWithinASecOfEachOther = d1.Subtract(d2).Duration() <= TimeSpan.FromSeconds(1); 

TimeSpan.Duration() करने के लिए कॉल छोड़ा जा सकता है अगर आप जानते हैं कि पहली DateTime अन्य की तुलना में पूर्व के समय में बिंदु का प्रतिनिधित्व नहीं कर सकते हैं, जैसे कि d1 >= d2

तुलना तरीकों के बारे में अपने प्रश्न का जवाब करने के लिए, DateTime.Compare(d1, d2)d1.CompareTo(d2) रूप में एक ही परिणाम पैदा करता है:

  • 0 अगर वे (, d1.Equals(d2)d1 == d2) समय में एक ही बिंदु प्रतिनिधित्व करते हैं। हालांकि ध्यान दें, कि डेटटाइम का संकल्प 1 टिक = 100 नैनोसेकंड = 10^-7 सेकेंड है।
  • एक 0 से अधिक मूल्य अगर d1 के बाद d2 (d1 > d2)
  • एक मूल्य कालक्रम के अनुसार है 0 से कम है, तो d1 d2 से पहले कालक्रम के अनुसार है (d1 < d2)
2

अपने सहिष्णुता जांच करने के लिए उपयोग TimeSpan - TimeSpan है घटाकर datetimes से लौटे प्रकार:

TimeSpan tolerance = new TimeSpan(0,0,1); 
return (date1 - date2) <= tolerance; 

Compare, CompareTo और Equals तुलना के लिए एक सहिष्णुता नहीं ले जाएगा, इसलिए इस तरह इस्तेमाल नहीं कर सकते हैं।

अन्य विकल्प अवांछित सटीकता को त्यागकर और नए की तुलना करें, मौजूदा से नए DateTime रों बनाने के लिए कर रहे हैं:

DateTime noSeconds1 = new DateTime(d1.Year, d1.Month, d1.Day, d1.Hour, d1.Minute, 0); 
DateTime noSeconds2 = new DateTime(d2.Year, d2.Month, d2.Day, d2.Hour, d2.Minute, 0); 

noSeconds1.Equals(noSeconds2); 
DateTime.Compare(noSeconds1, noSeconds2); 
noSeconds1.CompareTo(noSeconds2); 
2

आम तौर पर, यदि आप एक ही आपको बताने के लिए जो तारीख में कम है की तुलना करना चाहते हैं, बराबर या अधिक, डेटटाइम का उपयोग करें। कॉम्पारे()। अन्यथा, आप डेटटाइम का उपयोग कर सकते हैं। एक्वाल्स()। एक सहिष्णुता मूल्य जोड़ने के लिए, दूसरे से घटाना और कुछ TimeSpan से कम होने के परिणाम की तुलना करें:

// For seconds 
if (laterDate-earlierDate<=TimeSpan.FromSeconds(1)) 
    ... 

// For milliseconds 
if (laterDate-earlierDate<=TimeSpan.FromMilliseconds(1)) 
    ... 
2

आप स्ट्रिंग के लिए दोनों datetimes परिवर्तित कर सकते हैं और जिसके परिणामस्वरूप तार की तुलना करें। सुनिश्चित करें कि आप अपनी क्षेत्र की तुलना में विभिन्न क्षेत्रीय सेटिंग्स वाली मशीनों पर समस्याओं से बचने के लिए स्ट्रिंग प्रारूप को परिभाषित करते हैं।

संबंधित मुद्दे