2012-12-02 7 views
9

Ho cercato una risposta da un po 'di tempo, ma da nessuna parte l'ho trovato.Quale numero intero restituisce DateTime.CompareTo?

Stavo guardando in particolare this page. Ci dice che il metodo CompareTo restituisce un intero che indica se è precedente, uguale o successivo. Capisco l'uso di esso e capisco che per i tempi precedenti il ​​numero intero è negativo, per lo stesso è 0 ecc.

Ma qual è questo intero? Restituisce la differenza in secondi, millisecondi, zecche o forse nulla? Spero che tu possa aiutarmi con questo e se qualcuno può trovare un altro post con questa domanda, per favore dimmi. Sono sinceramente sorpreso di non aver trovato una domanda su questo argomento immediatamente ...

risposta

20

La documentazione è in realtà in il IComparable pagina interfaccia (che implementa DateTime): http://msdn.microsoft.com/en-us/library/system.icomparable.aspx

L'implementazione del metodo CompareTo (Object) deve restituire un Int32 con uno dei tre valori, come mostrato nella seguente tabella.

Meno di zero: L'istanza corrente precede l'oggetto specificato dal metodo CompareTo nell'ordinamento.

Zero: Questa istanza corrente si trova nella stessa posizione nell'ordine di ordinamento dell'oggetto specificato dal metodo CompareTo.

Maggiore di zero: Questa istanza corrente segue l'oggetto specificato dal metodo CompareTo nell'ordinamento.

2

È un dettaglio di implementazione che non dovresti mai sapere e che può cambiare in qualsiasi momento. Gli unici 3 categorie sono:

  • negativo
  • a zero
  • positivo

Se vi trovate con qualcosa di più di questo, allora qualcosa non va.

+0

Quindi questo significa che non posso usarlo per trovare rapidamente la differenza tra due volte? Dovrò sottrarli e quindi cercare quella differenza? – phil13131

+0

IMHO Il fatto che si tratti di un dettaglio di implementazione non significa che non dovrei mai aver bisogno di saperlo, o meglio, non ** voglio ** conoscerlo. I meccanismi interni della logica di base sono interessanti di per sé. – Rotem

+0

@ phil13131 per trovare la differenza tra due tempi: sottrarli per ottenere un intervallo di tempo –

0

Per quanto posso dire il numero è sempre -1, 0 o 1.

+1

In realtà non è garantito che vengano restituiti -1 o 1. – Leri

+0

@PLB Quali valori gli daresti da mangiare per ottenere un numero diverso da quelli? – Rotem

+1

qualsiasi numero negativo o positivo, rispettivamente. – Leri

0

E 'attuazione IComparable.CompareTo. Ciò significa che restituirà 0 se uguale, numero intero positivo se maggiore e numero intero negativo quando più piccolo.

+0

(Pre-modifica) La pagina che si collega esplicitamente dice -ve, zero, + ve; *** non *** -1,0,1 –

13

Non c'è niente specificato, in base MSDN:

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

Se si desidera confrontare giorni tra 2 DateTimes si dovrebbe essere alla ricerca di qualcosa di simile:

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