วิธีตรวจสอบว่า DateTime หนึ่งมากกว่าวันอื่นใน C # หรือไม่


105

ฉันมีสองDateTimeวัตถุ: StartDateและEndDate. ฉันต้องการที่จะตรวจสอบให้แน่ใจก่อนStartDate EndDateวิธีการทำใน C #?

คำตอบ:





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);
    }
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.