Come verificare se un DateTime è successivo a un altro in C #

Ho due oggetti DateTime : StartDate e EndDate . Voglio assicurarmi che StartDate sia prima di EndDate . Come è fatto in C #?

 if (StartDate < EndDate) // code 

se vuoi solo le date e non il tempo

 if (StartDate.Date < EndDate.Date) // code 
 if(StartDate < EndDate) {} 

DateTime supporta normali operatori di confronto.

È ansible utilizzare gli operatori sovraccaricati.

Per esempio:

 DateTime d1 = new DateTime(2008, 1, 1); DateTime d2 = new DateTime(2008, 1, 2); if (d1 < d2) { ... 
 if(dateTimeA > dateTimeB) Console.WriteLine("Do your own homework"); 
 if (StartDate>=EndDate) { throw new InvalidOperationException("Ack! StartDate is not before EndDate!"); } 
 StartDate < EndDate 

Controlla il metodo DateTime.Compare

Probabilmente è troppo tardi, ma per avvantaggiare altre persone che potrebbero inciampare su questo, ho usato un metodo di estensione per farlo usando IComparable come questo:

 public static class BetweenExtension { public static bool IsBetween(this T value, T min, T max) where T : IComparable { return (min.CompareTo(value) <= 0) && (value.CompareTo(max) <= 0); } } 

L'utilizzo di questo metodo di estensione con IComparable rende questo metodo più generico e lo rende utilizzabile con un'ampia varietà di tipi di dati e non solo di date.

Lo useresti in questo modo:

 DateTime start = new DateTime(2015,1,1); DateTime end = new DateTime(2015,12,31); DateTime now = new DateTime(2015,8,20); if(now.IsBetween(start, end)) { //Your code here } 

Ho avuto lo stesso requisito, ma quando ho usato la risposta accettata, non ha soddisfatto tutti i miei test unitari. Il problema per me è quando si ha un nuovo object, con date di inizio e fine e si deve impostare la data di inizio (in questa fase la data di fine ha il valore di data minimo 01/01/0001) – questa soluzione ha superato tutti i miei test di unità:

  public DateTime Start { get { return _start; } set { if (_end.Equals(DateTime.MinValue)) { _start = value; } else if (value.Date < _end.Date) { _start = value; } else { throw new ArgumentException("Start date must be before the End date."); } } } public DateTime End { get { return _end; } set { if (_start.Equals(DateTime.MinValue)) { _end = value; } else if (value.Date > _start.Date) { _end = value; } else { throw new ArgumentException("End date must be after the Start date."); } } } 

Manca il caso limite in cui entrambe le date di inizio e fine possono essere 01/01/0001 ma non sono preoccupato per questo.

  if (new DateTime(5000) > new DateTime(1000)) { Console.WriteLine("i win"); } 

Mi piacerebbe dimostrare che se si converte in .Date non è necessario preoccuparsi di ore / minuti / secondi ecc:

  [Test] public void ConvertToDateWillHaveTwoDatesEqual() { DateTime d1 = new DateTime(2008, 1, 1); DateTime d2 = new DateTime(2008, 1, 2); Assert.IsTrue(d1 < d2); DateTime d3 = new DateTime(2008, 1, 1,7,0,0); DateTime d4 = new DateTime(2008, 1, 1,10,0,0); Assert.IsTrue(d3 < d4); Assert.IsFalse(d3.Date < d4.Date); }