Search code examples
c#datetimecomparison

C# correct method to compare 2 date time


I have my following codes as below. It works in most scenario but today I one scenario where the expiration_date is 09/30/2017 00:00:00 is less than currentDateTime which is in string as 10/15/2016 14:34:19? What is the bug on my side I just comparing as string ?

  System.DateTime expiration_date = newVer.License.Status.Expiration_Date;
  DateTime currentDateTime = DateTime.Now;
  currentDateTime.ToString("MM/dd/yyyy HH:mm:ss");
  int a = expiration_date.ToString("MM/dd/yyyy HH:mm:ss")
           .CompareTo(currentDateTime.ToString("MM/dd/yyyy HH:mm:ss"));
  //MessageBox.Show("int a is :" + a);
  if (expiration_date.ToString("MM/dd/yyyy HH:mm:ss")
          .CompareTo(currentDateTime.ToString("MM/dd/yyyy HH:mm:ss")) < 1)
  {
      crossDate = 1;               
      MessageBox.Show("Cross Date Alert"+ " Expiry Date Is :"+ 
                      expiration_date.ToString("MM/dd/yyyy HH:mm:ss") 
                      + "  "+"Current Date Is :"+
                      currentDateTime.ToString("MM/dd/yyyy HH:mm:ss"));
  }

Solution

  • Compare datetime as you would compare numbers such as

    DateTime expiration_date = newVer.License.Status.Expiration_Date;
    DateTime currentDateTime = DateTime.Now;
    if( expiration_date < currentDateTime)
    {
       // expired 
    }
    

    If you need only date and not time then use

      DateTime expiration_date = newVer.License.Status.Expiration_Date.Date;
      DateTime currentDateTime = DateTime.Now.Date;
    

    You can also use day difference of two date.

    int daydiff = (int)((currentDateTime - expiration_date).TotalDays)