2012-04-24 10 views
23

Diciamo che abbiamoCome confrontare part-time del datetime

DateTime t1 = DateTime.Parse("2012/12/12 15:00:00.000"); 

e

DateTime t2 = DateTime.Parse("2012/12/12 15:03:00.000"); 

Come confrontare in C# e dire che il tempo è "è successiva a quella"?

+2

La tua domanda non corrisponde il titolo domanda. Vuoi confrontare il DateTime o solo la porzione di tempo di un DateTime? –

risposta

55

È possibile utilizzare la proprietà TimeOfDay e utilizzare il Compare contro di essa.

TimeSpan.Compare(t1.TimeOfDay, t2.TimeOfDay) 

Per la documentazione:

-1 if t1 is shorter than t2. 
0 if t1 is equal to t2. 
1 if t1 is longer than t2. 
+0

Pls condivido il codice di esempio –

+1

@Peretz senza alcuna intenzione intesa, ma questa risposta dovrebbe dirti tutto quello che devi sapere senza un codice di esempio ... – Jon

+0

@Peretz Ho aggiornato la mia risposta con uno snippet di codice e come utilizzare i risultati. –

2

Uso the DateTime.Compare metodo:

DateTime date1 = new DateTime(2009, 8, 1, 0, 0, 0); 
DateTime date2 = new DateTime(2009, 8, 1, 12, 0, 0); 
int result = DateTime.Compare(date1, date2); 
string relationship; 

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

Console.WriteLine("{0} {1} {2}", date1, relationship, date2); 

Edit: Se si desidera solo per confrontare i tempi, e ignorare la data, è possibile utilizzare la TimeOfDay come altri hanno suggerito. Se hai bisogno di qualcosa di meno fine, puoi anche utilizzare le proprietà Hour e Minute.

+0

Questo non si concentra sul tempo –

+0

Una data non è altro che una realizzazione del tempo. Le zecche, ad esempio, sono il numero di intervalli di 100 nanosecondi che sono trascorsi dalle 12:00:00 di mezzanotte all'1 gennaio 0001. Quindi confrontare due date significa semplicemente confrontare la differenza tra le zecche. Il confronto temporale è implicito. – mgnoonan

+2

Sì, ma l'OP chiede solo il confronto temporale. Se si confronta il segno di spunta completo, non testerà se 6AM è successivo alle 5 AM, ad esempio, che è ciò che sembra essere implicito dalla domanda –

14

Il <, <=, >, >= operatori tutti i lavori direttamente sul DateTime e TimeSpan oggetti. Quindi, qualcosa di simile a questo funziona:

DateTime t1 = DateTime.Parse("2012/12/12 15:00:00.000"); 
DateTime t2 = DateTime.Parse("2012/12/12 15:03:00.000"); 

if(t1.TimeOfDay > t2.TimeOfDay) { 
    //something 
} 
else { 
    //something else 
} 
+0

Grazie, credo ... era qualcosa come DateTime vs. TimeSpan come un rompicapo che avrebbe comunque garantito un downvote in primo luogo? Penso di no. – kaveman

+0

Non ha risposto alla domanda come postata, quindi sì tipicamente questo è quello che sono i downvotes. Inoltre, hai dimenticato di menzionare == funziona anche. –

+0

Qui stiamo davvero battendo un cavallo morto ma ovviamente sei coinvolto in questi dettagli stupidi (anche con @mgnoonan). Ci sono state alcune modifiche tra il momento in cui l'OP è stato presentato, la mia risposta originale, la tua risposta, la mia risposta modificata, ecc. Esercita un buon giudizio prima di votare a fondo ogni interpretazione della domanda che non corrisponde alla tua. – kaveman

Problemi correlati