2011-01-22 7 views
0

필자는 직장에서 델파이를 사용하고 날짜를 비교하는 철저한 단위 테스트에서 을 사용한 직접 비교가과 같다고 계산 된 날짜를 비교할 때 충분히 신뢰할 수 없다는 것을 발견했습니다. 따라서 규칙적으로 나는 CompareDateTimeSameDateTime은 Delphi에서 날짜 비교를위한 함수에 내장되어 있습니다.datetimes를 비교하는 가장 신뢰할 수있는 방법은 무엇입니까?

C#에서는 습관적 인 힘으로 표준 연산자 =<>을 사용하여 날짜/시간을 비교합니다. 우리는 DateTime.CompareDateTime.Equals과 같은 함수를 가지고 있기 때문에 정확도 측면에서 &의 신뢰성을 얻으려면 에 내장 함수를 사용해야합니까?

그들은 연산자를 사용하여보다 정확한 비교를 제공합니까?

+0

UTC 및 로컬 타임 스탬프를 빼면 원시 시간 값을 뺍니다. – CodesInChaos

답변

3

귀하의 날짜/시간을 계산하면 주어진 시간의 차이를 계산하는 것이 더 편리합니다. TimeSpan입니다.

TimeSpan travelTime = arrival - departure; 

그런 다음 허용 허용치보다 작은 지 확인할 수 있습니다.

if (Math.Abs(travelTime.TotalMilliseconds) < tolerance) 
{ 
    // times are equal. 
} 

당신은 부동 소수점 값을 위해 취해야 할 접근 방식이 비슷하지만 부정확가 메모리에 표현되는 것 아니 어떻게 데이터에서 유래이 경우로 그 독립적이다.

+1

이것은 나에게도 가장 먼저 떠오르는 것입니다. 멋지게 DateTime의 확장 메서드로 래핑 될 수 있습니다. – tomfanning

+0

그래서 혼란스러워하는 이유는 ... 신뢰할 수없는 경우 연산자 비교를 처음부터 허용하는 이유는 무엇입니까? 연산자가 정확히 DateTimes에서 수행하는 작업은 무엇입니까? – James

+0

@James - 'float1 == float2'와 같은 방식으로 허용됩니다. 그것은 언어의 일부입니다. 날짜 부분 만 * 할당 * 날짜/시간을 처리했다면 평등은 아마 괜찮을 것입니다. 그러나 밀리 초 또는 계산 된 시간이 ** 남았을 경우 ** 오차가 있습니다. – ChrisF

0

저는 잘 모르겠지만, 제 동료는 항상 Equals 연산자를 사용하라고했습니다. DateTime 개체의 경우 EqualsCompare이 틱을 비교합니다.

TimeSpan ChrisF에 대해 자세히 알아 보려면 here을 참조하십시오.

+0

"TimeSpan"에 대해 알고 있습니다. 연산자 비교를 사용하는 것이 충분히 신뢰할 만하다면 명확한 점을 찾고있었습니다. – James

관련 문제