C #에서 한 DateTime이 다른 DateTime보다 큰지 확인하는 방법


105

두 개의 DateTime개체가 있습니다 : StartDateEndDate. 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) { ...

8
if (StartDate>=EndDate)
{
    throw new InvalidOperationException("Ack!  StartDate is not before EndDate!");
}



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이 될 수있는 경우를 놓치지 만 나는 그것에 대해 걱정하지 않습니다.


2
        if (new DateTime(5000) > new DateTime(1000))
        {
            Console.WriteLine("i win");
        }

0

.Date로 변환하면 시간 / 분 / 초 등에 대해 걱정할 필요가 없음을 보여주고 싶습니다.

    [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.