반응형
C #에서 하나의 DateTime이 다른 DateTime보다 큰지 확인하는 방법
개의 두 DateTime개체가 있습니다 : StartDate및 EndDate. StartDate이전 인지 확인하고 싶습니다 EndDate. C #에서 어떻게 수행 검증?
if (StartDate < EndDate)
// code
시간이 아닌 날짜 만 원하는 경우
if (StartDate.Date < EndDate.Date)
// code
if(StartDate < EndDate)
{}
DateTime은 일반 비교 연산자를 지원합니다.
if(dateTimeA > dateTimeB) Console.WriteLine("Do your own homework");
오버로드 된 <또는> 연산자를 사용할 수 있습니다.
예를 들면 :
DateTime d1 = new DateTime(2008, 1, 1);
DateTime d2 = new DateTime(2008, 1, 2);
if (d1 < d2) { ...
if (StartDate>=EndDate)
{
throw new InvalidOperationException("Ack! StartDate is not before EndDate!");
}
StartDate < EndDate
DateTime.Compare 메서드를 확인하십시오.
이것은 아마도 너무 늦었을 것입니다. 그러나 그러나 우연히 발견 할 수있는 다른 사람들에게 다음과 같이 사용하는 확장 방법을 사용할 수 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
}
요구 요구 사항이 있었지만 수락 된 답변을 사용할 때 모든 단위 테스트를 사용할 수 있습니다. (이 단계에서 종료 날짜는 최소 날짜 값이 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이 될 수있는 경우에 대해 걱정하지 않습니다.
if (new DateTime(5000) > new DateTime(1000))
{
Console.WriteLine("i win");
}
.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);
}
반응형
'IT' 카테고리의 다른 글
| 명령 줄에서 VS Code Editor를 호출하는 방법 (0) | 2020.08.24 |
|---|---|
| 체크 아웃하지 않고 다른 분기를 현재로 전개 (0) | 2020.08.24 |
| Android ListView 디바이더 (0) | 2020.08.24 |
| 알 수없는 공급자 : $ modalProvider <-AngularJS의 $ modal 오류 (0) | 2020.08.24 |
| Node Sass는 아직 현재 환경을 지원하지 않습니다. Linux 64 비트 (거짓 포함) (0) | 2020.08.24 |