कैसे दिनांक समय एक धाराप्रवाह इंटरफ़ेस का एक सा बनाने के लिए (उन सभी क्रोध सही कर रहे हैं?)
public static class DateTimeTolerance
{
private static TimeSpan _defaultTolerance = TimeSpan.FromSeconds(10);
public static void SetDefault(TimeSpan tolerance)
{
_defaultTolerance = tolerance;
}
public static DateTimeWithin Within(this DateTime dateTime, TimeSpan tolerance)
{
return new DateTimeWithin(dateTime, tolerance);
}
public static DateTimeWithin Within(this DateTime dateTime)
{
return new DateTimeWithin(dateTime, _defaultTolerance);
}
}
यह राज्य की दुकान और एक परिभाषित करने के लिए एक वर्ग पर निर्भर करता है के लिए एक विस्तार विधि के बारे में ! == के लिए जोड़े को ऑपरेटर भार के और =:
public class DateTimeWithin
{
public DateTimeWithin(DateTime dateTime, TimeSpan tolerance)
{
DateTime = dateTime;
Tolerance = tolerance;
}
public TimeSpan Tolerance { get; private set; }
public DateTime DateTime { get; private set; }
public static bool operator ==(DateTime lhs, DateTimeWithin rhs)
{
return (lhs - rhs.DateTime).Duration() <= rhs.Tolerance;
}
public static bool operator !=(DateTime lhs, DateTimeWithin rhs)
{
return (lhs - rhs.DateTime).Duration() > rhs.Tolerance;
}
public static bool operator ==(DateTimeWithin lhs, DateTime rhs)
{
return rhs == lhs;
}
public static bool operator !=(DateTimeWithin lhs, DateTime rhs)
{
return rhs != lhs;
}
}
फिर अपने कोड में आप कर सकते हैं:
DateTime d1 = DateTime.Now;
DateTime d2 = d1 + TimeSpan.FromSeconds(20);
if(d1 == d2.Within(TimeSpan.FromMinutes(1))) {
// TRUE! Do whatever
}
विस्तार वर्ग भी एक डिफ़ॉल्ट स्थिर सहिष्णुता घरों, ताकि आप अपनी पूरी परियोजना के लिए एक सहिष्णुता की स्थापना की और कोई पैरामीटर के साथ विधि के भीतर का उपयोग कर सकते हैं:
DateTimeTolerance.SetDefault(TimeSpan.FromMinutes(1));
if(d1 == d2.Within()) { // Uses default tolerance
// TRUE! Do whatever
}
मैं कुछ इकाई परीक्षण है, लेकिन है कि हो जाएगा यहां पेस्ट करने के लिए थोड़ा अधिक कोड।
एक थोड़ा अलग तरह से: अगर ((DATE1 - date2) .TotalSeconds> 10) – Thomas
यह '(dateTime1 - dateTime2) होना चाहिए। अवधि()
Marius