2012-12-02 8 views
9

Ich suche schon seit einiger Zeit nach einer Antwort, aber nirgendwo konnte ich es finden.Welche Ganzzahl gibt DateTime.CompareTo tatsächlich zurück?

Ich schaute besonders auf this page. Dort heißt es, dass die Methode CompareTo eine ganze Zahl zurückgibt, die angibt, ob sie früher, gleich oder später ist. Ich verstehe die Verwendung davon und ich verstehe, dass für frühere Zeiten die ganze Zahl negativ ist, für das gleiche ist es 0 usw.

Aber was ist das Ganze? Gibt es den Unterschied in Sekunden, Millisekunden, Ticks oder gar nichts zurück? Ich hoffe du kannst mir dabei helfen und wenn jemand einen anderen Beitrag mit dieser Frage finden kann, sag es mir bitte. Ich bin ehrlich gesagt ziemlich überrascht, dass ich zu diesem Thema keine Frage sofort finden konnte ...

Antwort

20

Die Dokumentation ist eigentlich in die IComparable Schnittstelle Seite (Datumzeit-Geräte): http://msdn.microsoft.com/en-us/library/system.icomparable.aspx

Die Implementierung der CompareTo (Object) -Methode muss ein Int32 zurückgeben, das einen der drei Werte aufweist, wie in der folgenden Tabelle gezeigt.

Weniger als Null: Die aktuelle Instanz steht vor dem angegebenen Objekt durch die CompareTo-Methode in der Sortierreihenfolge.

Null: Diese aktuelle Instanz befindet sich an der gleichen Position in der Sortierreihenfolge wie das von der CompareTo-Methode angegebene Objekt.

Größer als Null: Diese aktuelle Instanz folgt dem Objekt, das von der CompareTo-Methode in der Sortierreihenfolge angegeben wird.

2

Es ist ein Implementierungsdetail, das Sie nie wissen sollten und jederzeit ändern können. Die einzigen drei Kategorien sind:

  • negativ
  • Null
  • positive

Wenn Sie sich etwas mehr als die Verwendung finden, dann stimmt etwas nicht.

+0

Also das heißt, ich kann es nicht verwenden, um schnell den Unterschied zwischen zwei Zeiten zu finden? Ich muss sie abziehen und dann nach diesem Unterschied suchen? – phil13131

+0

IMHO Die Tatsache, dass es ein Implementierungsdetail ist, bedeutet nicht, dass ich nie etwas darüber wissen sollte, oder besser gesagt, ich will es nicht wissen. Die inneren Abläufe der Rahmenlogik sind an sich interessant. – Rotem

+0

@ phil13131, um den Unterschied zwischen zwei Zeiten zu finden: subtrahieren Sie sie, um eine Zeitspanne zu erhalten –

0

Soweit ich die Nummer sagen kann, ist immer -1, 0 oder 1.

+1

Tatsächlich gibt es keine Garantie, dass -1 oder 1 zurückgegeben wird. – Leri

+0

@PLB Welche Werte würden Sie eingeben, um eine andere Nummer zu erhalten? – Rotem

+1

jede negative oder positive Zahl. – Leri

0

Es ist die Umsetzung von IComparable.CompareTo. Dies bedeutet, dass es 0 zurückgibt, wenn es gleich ist, positive ganze Zahl wenn größer und negative ganze Zahl wenn kleiner.

+0

(Pre-edit) Die Seite, auf die Sie verlinken, sagt ausdrücklich -ve, zero, + ve; *** nicht *** -1,0,1 –

13

Es gibt nichts angegeben, nach MSDN:

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

Wenn Sie zwischen zwei Datetime vergleichen Tagen wollen, sollten Sie so etwas suchen werden:

if ((expiryDate - DateTime.Now).Days < 30)