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"));
}
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)
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");
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.
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"));
}