2009-08-10 53 views
6

我需要比較兩個日期時間值以確定相等(完全相同),使用精確的精度。這是否是最好的方法?我的日期可能有幾秒和幾毫秒,但我想只考慮下來,直到分鐘。在LINQ中確定日期時間值與精確精度的相等性

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

我採取這一片段,並張貼作爲一個回答你的問題,人們這樣可以發表評論/從你的問題 – 2009-08-10 18:38:29

回答

11

檢查Math.Abs(diff.TotalMinutes) == 0是否不會這樣做,否 - 檢查它們是否與正好相同。

您是否試圖檢查他們是否有相同的分鐘,或者他們是否不到一分鐘?對於一,用途:

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,那麼顯然你不能使用本地方法,我們將不得不再次看...

編輯:我仍然很不清楚你的問題。如果你需要他們相同的日期/時間正好,很容易(撇開可能局部VS UTC的問題):

where dateTime1 == dateTime2 

然而,提出爲什麼你提到的「微小精密」的問題問題主題中的問題標題或「使用最多精確度」。 。

+0

Jon - 我對使用RoundToMinute(datetime)非常謹慎,因爲傳入的日期可能有秒數,我想保持一分鐘的精度。儘管Math.abs可能會拋棄它,我想呢?當然,我可以(應該)在使用日期之前去掉秒數!但要回答你的問題,是的,我需要他們是完全一樣的 – PreethaA 2009-08-12 13:54:10

+1

@Preetha:如果你需要他們*完全相同,那麼你需要按照問題標題以「精確度」的方式? – 2009-08-12 13:56:18

+0

如果你有日期時間值進來,你不能確定他們是否有附加秒,但你所關心的是它們是否完全相同。我想stripseconds部分應該是完全獨立的,並且在值的實際比較之前..所以這將在這種情況下起作用。 – PreethaA 2009-08-14 13:22:18

0

如何

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

+0

正是我想,當我看到這個問題 – 2009-08-10 18:37:36

+0

如果你指的單獨投票向上或向下它'datetime1.Millisecond',這是不對的 - 值總是介於0和999之間。 – 2009-08-10 18:42:48

0

感謝阿倫,將做到這一點(!還是搞清楚的過程中是如何工作的)這是指示答覆我已經想出了最初的代碼片段:

(Math.Abs​​(datetime1.Subtract( datetime2).TotalMinutes)== 0)

背景:在我的linq查詢的WHERE子句(因此是一行),我需要檢查datetime1和datetime2是否完全相同。考慮中的日期時間值是查詢中使用的其他值的戳記日期。

+0

在我的答案中編輯,只需使用dateTime1 == dateTime2。請更新您的問題以擺脫「使用最多一分鐘的精確度」,因爲這與「完全相同」是不一樣的。 – 2009-08-12 13:58:07