2012-12-02 108 views
9

我一直在尋找一段時間的答案,但我實際上找不到它。DateTime.CompareTo實際返回什麼整數?

我特別看着this page。在那裏它說CompareTo方法返回一個整數,指示它是否早於,相同或更晚。我理解它的使用,我明白,以前的整數是負的,因爲它是0等。

但是這個整數是什麼?它是以秒,毫秒,滴答還是什麼都不回?我希望你能幫助我,如果有人可以找到這個問題的另一個帖子,請告訴我。我真的很驚訝,我無法立即在這個主題上找到一個問題...

回答

20

的文件實際上是在IComparable的接口頁面(即日期時間工具): http://msdn.microsoft.com/en-us/library/system.icomparable.aspx

CompareTo(Object)方法的實現必須返回具有三個值之一的Int32,如下表所示。

小於零當前實例之前的目的是通過在排序順序CompareTo方法指定 。

零:該當前實例發生在排序順序由CompareTo方法所指定的對象的相同位置。

大於零:此當前實例遵循CompareTo方法按排序順序指定的對象。

2

這是一個實施細節,你應該永遠不需要知道,並且可以在任何時候改變。在只有3個類別:

  • 積極

如果你發現自己使用什麼比這多,那麼什麼是錯的。

+0

那麼這就意味着我無法使用它來快速找到兩次之間的區別?我將不得不減去它們然後尋找那個差異? – phil13131

+0

恕我直言,它是一個實現細節並不意味着我不應該知道它,或者說,不要**想知道它。框架邏輯的內部工作本身很有趣。 – Rotem

+0

@ phil13131找到兩次之間的差異:減去它們以獲得時間跨度 –

0

至於我可以告訴編號始終是-1,0,或1

+1

其實不能保證-1或1會被退回。 – Leri

+0

@PLB你會給它什麼樣的價值以獲得除此之外的數字? – Rotem

+1

分別爲負數或正數。 – Leri

0

這是實現IComparable.CompareTo。這意味着如果相等,則返回0;如果更大,則返回正整數;更小時返回負整數。

+0

(預編輯)您鏈接的頁面明確表示-ve,零,+ ve; ***不*** -1,0,1 –

13

沒有什麼規定,根據MSDN:

if (result < 0) 
    relationship = "is earlier than"; 
else if (result == 0) 
    relationship = "is the same time as";   
else 
    relationship = "is later than"; 

如果你想2個DateTime是否你應該尋找這樣的事情之間的比較天:

if ((expiryDate - DateTime.Now).Days < 30) 
相關問題