2010-10-16 210 views
5

我想知道如何使用DateTime方法Compare,CompareToEquals在.NET中比較兩個DateTime對象,而無需比較刻度。如何比較兩個日期時間

我只需要一個毫秒或秒的公差級別。

這怎麼辦?

回答

9

您可以從另一個DateTime減去一個TimeSpan,表示它們之間的時間差。然後,您可以測試此跨度的絕對值是否在所需的容差範圍內。

bool dtsWithinASecOfEachOther = d1.Subtract(d2).Duration() <= TimeSpan.FromSeconds(1); 

,如果你知道第一個DateTime不能及時表示較早的時間點比其他的都可以省略TimeSpan.Duration()調用,即d1 >= d2

爲了回答你有關的比較方法查詢, DateTime.Compare(d1, d2)產生相同的結果爲d1.CompareTo(d2)

  • 0,如果它們表示相同的時間點(d1.Equals(d2)d1 == d2)。但請注意,DateTime的分辨率是1 tick = 100 nanoseconds = 10^-7秒。
  • 大於0的值,如果D1是按時間順序後D2(d1 > d2
  • 值小於0,如果D1是按時間順序D2之前(d1 < d2
2

使用TimeSpan的寬容檢查 - TimeSpan是從減去DateTime是否鍵入返回:

TimeSpan tolerance = new TimeSpan(0,0,1); 
return (date1 - date2) <= tolerance; 

CompareCompareToEquals不會採取了比較寬容,讓不能用這種方式。

其他選項是從現有的創建新DateTime S,丟棄無用的準確性和比較新的:

DateTime noSeconds1 = new DateTime(d1.Year, d1.Month, d1.Day, d1.Hour, d1.Minute, 0); 
DateTime noSeconds2 = new DateTime(d2.Year, d2.Month, d2.Day, d2.Hour, d2.Minute, 0); 

noSeconds1.Equals(noSeconds2); 
DateTime.Compare(noSeconds1, noSeconds2); 
noSeconds1.CompareTo(noSeconds2); 
2

一般來說,如果你想有一個單一的比較告訴你哪個日期是少,等於或大於,使用DateTime.Compare()。否則,您可以使用DateTime.Equals()。要添加一個公差值,減去從另一個和比較結果小於一些時間跨度:

// For seconds 
if (laterDate-earlierDate<=TimeSpan.FromSeconds(1)) 
    ... 

// For milliseconds 
if (laterDate-earlierDate<=TimeSpan.FromMilliseconds(1)) 
    ... 
2

你可以既DateTime是否轉換爲字符串,然後比較所產生的字符串。確保您定義了字符串格式以避免在區域設置不同於您的設備的機器上出現問題。