2009-08-10 3 views
6

분 정밀도를 사용하여 동일성을 확인하기 위해 두 datetime 값을 비교해야합니다. 이렇게하는 것이 가장 좋은 방법일까요? 내 날짜는 초 및 밀리 초가 될 수 있지만 분까지만 고려하고 싶습니다.LINQ 내에서 정밀도가있는 Datetime 값의 동일성 확인

 where (Math.Abs(datetime1.Subtract(datetime2).TotalMinutes) == 0) 
+0

나는 그 발췌 내용을 귀하의 질문에 대한 대답으로 게시 할 것입니다. 사람들이 귀하의 질문과 별도로 의견을 올리거나 내릴 수 있습니다. –

답변

11

Math.Abs(diff.TotalMinutes) == 0이 아닌지 확인하십시오. 해당 번호가 인지 정확히인지 확인합니다.

분이 동일한 지 또는 1 분 미만인지 확인하려고합니까? 첫 번째, 사용을 위해 :

where RoundToMinute(dateTime1) == RoundToMinute(dateTime2) 

선언 한 : 두 번째, 사용을 위해

public static DateTime RoundToMinute(DateTime time) 
{ 
    return new DateTime(time.Year, time.Month, time.Day, 
         time.Hour, time.Minute, 0, time.Kind); 
} 

:

where Math.Abs((dateTime1 - dateTime2).TotalMinutes) < 1 

당신은 당신이 결과가 경우로 원하는 것을 고려해야 하나는 로컬이고 다른 하나는 UTC입니다 ...

여기에 LINQ에 특정한 것은 없습니다. 개체에 LINQ 사용. LINQ to SQL을 사용하고 있다면 분명 로컬 메소드를 사용할 수 없기 때문에 다시 찾아야 할 것입니다 ...

편집 : 아직 귀하의 질문에 대해 명확하지 않습니다. 당신이 정확히 같은 날짜/시간 수를해야하는 경우 (UTC 문제 대 가능 지역 제쳐두고) 쉽게 :

where dateTime1 == dateTime2 

을 그러나 "분 정밀도"에서 언급하는 이유에 대한 질문을 구걸하는 질문 제목이나 "질문에 답하기". .

(Math.Abs ​​(datetime1.Subtract (:

+0

Jon - RoundToMinute (datetime)를 사용하는 것에 조심 스러웠습니다. 들어오는 날짜가 초를 가질 수 있으므로 분 정밀도를 유지하려고했습니다. Math.abs가 그걸 버릴지도 모르지만 나는 추측합니까? 물론 (물론) 날짜를 사용하기 전에 초를 벗을 수 있어야합니다! 그러나 귀하의 질의에 대답하기 위해, 그렇습니다. 정확하게 일치해야합니다. – PreethaA

+1

@Preetha : 당신이 똑같이 * 똑같을 필요가 있다면, 어떤 식으로 질문의 제목대로 "미세한 정밀도"가 필요합니까? –

+0

datetime 값이 들어오는 경우, 초를 첨부했는지 여부를 확신 할 수 없지만, 정확히 같은지 여부는 신경 쓰지 않아도됩니다. 나는 stripseconds 부분이 완전히 별개이어야하고 값의 실제 비교를 선행해야한다고 생각합니다. 그래서이 경우 작동합니다. – PreethaA

0

어떻게

where (Math.Floor(datetime1.Ticks/600000000) == Math.Floor(datetime2.Ticks/600000000)) 

어떻습니까?

+0

질문을 보았을 때 정확히 생각한 것 –

+0

만약 그렇다면 'datetime1.Millisecond'는 맞지 않습니다. 항상 0에서 999 사이의 값입니다. –

0

감사 알렌, 그렇게 할 것 (! 여전히 프로세스가 작동하는 방법을 정확하게 알아내는) 여기에 내가 처음 마련했던 대답을 나타내는 코드입니다 datetime2) .TotalMinutes) == 0)

배경 : 내 linq 쿼리의 WHERE 절 (따라서 한 줄자) 내에서 datetime1과 datetime2가 정확히 동일한 지 확인해야합니다. 고려중인 datetime 값은 쿼리에 사용 된 다른 값의 스탬프 날짜입니다.

+0

제 대답에 편집 된대로 dateTime1 == dateTime2 만 사용하십시오. "정확히 똑같은"것과 같은 것이 아니기 때문에 "분 정밀도 사용"을 없애기 위해 질문을 업데이트하십시오. –