我需要比較兩個日期時間值以確定相等(完全相同),使用精確的精度。這是否是最好的方法?我的日期可能有幾秒和幾毫秒,但我想只考慮下來,直到分鐘。在LINQ中確定日期時間值與精確精度的相等性
where (Math.Abs(datetime1.Subtract(datetime2).TotalMinutes) == 0)
我需要比較兩個日期時間值以確定相等(完全相同),使用精確的精度。這是否是最好的方法?我的日期可能有幾秒和幾毫秒,但我想只考慮下來,直到分鐘。在LINQ中確定日期時間值與精確精度的相等性
where (Math.Abs(datetime1.Subtract(datetime2).TotalMinutes) == 0)
檢查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
然而,提出爲什麼你提到的「微小精密」的問題問題主題中的問題標題或「使用最多精確度」。 。
Jon - 我對使用RoundToMinute(datetime)非常謹慎,因爲傳入的日期可能有秒數,我想保持一分鐘的精度。儘管Math.abs可能會拋棄它,我想呢?當然,我可以(應該)在使用日期之前去掉秒數!但要回答你的問題,是的,我需要他們是完全一樣的 – PreethaA 2009-08-12 13:54:10
@Preetha:如果你需要他們*完全相同,那麼你需要按照問題標題以「精確度」的方式? – 2009-08-12 13:56:18
如果你有日期時間值進來,你不能確定他們是否有附加秒,但你所關心的是它們是否完全相同。我想stripseconds部分應該是完全獨立的,並且在值的實際比較之前..所以這將在這種情況下起作用。 – PreethaA 2009-08-14 13:22:18
如何
where (Math.Floor(datetime1.Ticks/600000000) == Math.Floor(datetime2.Ticks/600000000))
?
正是我想,當我看到這個問題 – 2009-08-10 18:37:36
如果你指的單獨投票向上或向下它'datetime1.Millisecond',這是不對的 - 值總是介於0和999之間。 – 2009-08-10 18:42:48
感謝阿倫,將做到這一點(!還是搞清楚的過程中是如何工作的)這是指示答覆我已經想出了最初的代碼片段:
(Math.Abs(datetime1.Subtract( datetime2).TotalMinutes)== 0)
背景:在我的linq查詢的WHERE子句(因此是一行),我需要檢查datetime1和datetime2是否完全相同。考慮中的日期時間值是查詢中使用的其他值的戳記日期。
在我的答案中編輯,只需使用dateTime1 == dateTime2。請更新您的問題以擺脫「使用最多一分鐘的精確度」,因爲這與「完全相同」是不一樣的。 – 2009-08-12 13:58:07
我採取這一片段,並張貼作爲一個回答你的問題,人們這樣可以發表評論/從你的問題 – 2009-08-10 18:38:29