कैसे चेक करें कि C # में एक DateTime दूसरे से बड़ा है या नहीं


105

मेरे पास दो DateTimeवस्तुएं हैं: StartDateऔर EndDate। मैं StartDateपहले सुनिश्चित करना चाहता हूं EndDate। यह C # में कैसे किया जाता है?

जवाबों:


210
if (StartDate < EndDate)
   // code

अगर आप सिर्फ तारीखें चाहते हैं, और समय नहीं

if (StartDate.Date < EndDate.Date)
    // code



23

आप अतिभारित <या> ऑपरेटरों का उपयोग कर सकते हैं।

उदाहरण के लिए:

DateTime d1 = new DateTime(2008, 1, 1);
DateTime d2 = new DateTime(2008, 1, 2);
if (d1 < d2) { ...




5

यह शायद बहुत देर हो चुकी है, लेकिन अन्य लोगों को लाभान्वित करने के लिए जो इस पर ठोकर खा सकते हैं, मैंने इस IComparableतरह का उपयोग करके एक विस्तार विधि का उपयोग किया:

public static class BetweenExtension
    {
        public static bool IsBetween<T>(this T value, T min, T max) where T : IComparable
        {
            return (min.CompareTo(value) <= 0) && (value.CompareTo(max) <= 0);
        }
    }

इस विस्तार पद्धति का उपयोग इस पद्धति को IComparableऔर अधिक सामान्य बनाता है और इसे कई प्रकार के डेटा प्रकारों के साथ प्रयोग करने योग्य बनाता है, न कि केवल तिथियों के लिए।

आप इसे इस तरह उपयोग करेंगे:

DateTime start = new DateTime(2015,1,1);
DateTime end = new DateTime(2015,12,31);
DateTime now = new DateTime(2015,8,20);

if(now.IsBetween(start, end))
{
     //Your code here
}

3

मेरी भी यही आवश्यकता थी, लेकिन स्वीकृत उत्तर का उपयोग करते समय, यह मेरे सभी यूनिट परीक्षणों को पूरा नहीं करता था। मेरे लिए मुद्दा यह है कि जब आपके पास एक नई वस्तु है, तो प्रारंभ और समाप्ति तिथियों के साथ और आपको प्रारंभ तिथि निर्धारित करनी होगी (इस स्तर पर आपकी अंतिम तिथि का न्यूनतम दिनांक मूल्य 01/01/0001 है) - इस समाधान ने सभी को पारित किया मेरी इकाई परीक्षण:

    public DateTime Start
    {
        get { return _start; }
        set
        {
            if (_end.Equals(DateTime.MinValue))
            {
                _start = value;
            }
            else if (value.Date < _end.Date)
            {
                _start = value;
            }
            else
            {
                throw new ArgumentException("Start date must be before the End date.");
            }
        }
    }


    public DateTime End
    {
        get { return _end; }
        set
        {
            if (_start.Equals(DateTime.MinValue))
            {
                _end = value;
            }
            else if (value.Date > _start.Date)
            {
                _end = value;
            }
            else
            {
                throw new ArgumentException("End date must be after the Start date.");
            }
        }
    }

यह उस किनारे के मामले को याद करता है, जहां प्रारंभ और समाप्ति दिनांक दोनों 01/01/0001 हो सकते हैं, लेकिन मुझे इस बारे में चिंता नहीं है।



0

मैं यह प्रदर्शित करना चाहूंगा कि यदि आप इसमें कनवर्ट करते हैं। यह सुनिश्चित करें कि आपको घंटों / मिनट / सेकंड आदि के बारे में चिंता करने की आवश्यकता नहीं है:

    [Test]
    public void ConvertToDateWillHaveTwoDatesEqual()
    {
        DateTime d1 = new DateTime(2008, 1, 1);
        DateTime d2 = new DateTime(2008, 1, 2);
        Assert.IsTrue(d1 < d2);

        DateTime d3 = new DateTime(2008, 1, 1,7,0,0);
        DateTime d4 = new DateTime(2008, 1, 1,10,0,0);
        Assert.IsTrue(d3 < d4);
        Assert.IsFalse(d3.Date < d4.Date);
    }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.