web-dev-qa-db-fra.com

C # méthode correcte pour comparer 2 date/heure

J'ai mes codes suivants comme ci-dessous. Cela fonctionne dans la plupart des scénarios, mais aujourd'hui, dans un scénario où expiration_date est 09/30/2017 00:00:00 est inférieur à currentDateTime qui est dans string en tant que 10/15/2016 14:34:19? Quel est le bogue de mon côté que je compare en tant que 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"));
  }
5
user5313398

Comparez date-heure comme vous comparer des nombres tels que

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

Si vous n'avez besoin que de la date et non de l'heure, utilisez

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

Vous pouvez également utiliser la différence de jour de deux dates.

int daydiff = (int)((currentDateTime - expiration_date).TotalDays)
11
Amit Hasan

Exemple de comparaison de dates:

            DateTime d1 = DateTime.Now;
            DateTime d2 = DateTime.Now.AddDays(1);

            if ( d2.CompareTo(d1)>0 )
                Console.WriteLine("d2>d1");
            else
                Console.WriteLine("d2<=d1");
1
shadow

Votre question a une réponse en deux parties. Il y a peut-être quelque chose de plus facile, mais:

Commencez par convertir votre chaîne en objet DateTime. La classe DateTime a plusieurs méthodes pour vous aider. Essayez ParseExact.

Ensuite, convertissez l'objet DateTime en un horodatage Unix.

Maintenant, vous avez deux longs ints, que vous pouvez comparer et convertir la comparaison int en un autre DateTime, et en tirer des choses.

1
dylanthelion

ne pas convertir en chaînes

        DateTime expiration_date = newVer.License.Status.Expiration_Date;

        if (expiration_date.CompareTo(DateTime.Now) < 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"));
        }
1
user3598756