J'essaie de déterminer si un compte expire dans moins de 30 jours. Est-ce que j'utilise DateTime Compare correctement?
if (DateTime.Compare(expiryDate, now) < 30)
{
matchFound = true;
}
Est-ce que j'utilise DateTime Compare correctement?
N ° Compare
n'offre que des informations sur la position relative de deux dates: inférieure, égale ou supérieure. Ce que vous voulez, c'est quelque chose comme ça:
if ((expiryDate - DateTime.Now).TotalDays < 30)
matchFound = true;
Ceci soustrait deux DateTime
s. Le résultat est un objet TimeSpan
qui possède une propriété TotalDays
.
De plus, le conditionnel peut être écrit directement comme:
matchFound = (expiryDate - DateTime.Now).TotalDays < 30;
Pas besoin de if
.
devrait être
matchFound = (expiryDate - DateTime.Now).TotalDays < 30;
pas le nombre total de jours sinon vous aurez un comportement étrange
Eh bien, je le ferais plutôt comme ceci:
TimeSpan diff = expiryDate - DateTime.Today;
if (diff.Days > 30)
matchFound = true;
Comparer ne répond que par un entier indiquant que la première est antérieure, identique ou ultérieure ...
Essayez ceci à la place
if ( (expiryDate - DateTime.Now ).TotalDays < 30 ) {
matchFound = true;
}
Compare renvoie respectivement 1, 0 et -1 pour supérieur à, égal à, inférieur à.
Tu veux:
if (DateTime.Compare(expiryDate, DateTime.Now.AddDays(30)) <= 0)
{
bool matchFound = true;
}
Cela vous donnera un résultat précis:
if ((expiryDate.Date - DateTime.Now.Date).Days < 30)
matchFound = true;
Comparer est inutile, Jours/TotalDays sont inutiles.
Tout ce dont tu as besoin c'est
if (expireDate < DateTime.Now) {
// has expired
} else {
// not expired
}
notez que cela fonctionnera si vous décidez d’utiliser des minutes, des mois, voire des années comme critère d’expiration.
Ce que vous voulez faire, c'est soustraire les deux DateTimes (expiryDate et DateTime.Now). Cela renverra un objet de type TimeSpan. TimeSpan a une propriété "Days". Comparez ce nombre à 30 pour votre réponse.
Non ce n'est pas correct, essayez ceci:
DateTime expiryDate = DateTime.Now.AddDays(-31);
if (DateTime.Compare(expiryDate, DateTime.Now.AddDays(-30)) < 1)
{
matchFound = true;
}
En fait, aucune de ces réponses n'a fonctionné pour moi. Je l'ai résolu en faisant comme ceci:
if ((expireDate.Date - DateTime.Now).Days > -30)
{
matchFound = true;
}
Quand j'ai essayé de faire ça:
matchFound = (expiryDate - DateTime.Now).Days < 30;
Aujourd'hui, 2011-11-14 et mon expiryDate était 2011-10-17 j'ai obtenu ce matchFound = -28. Au lieu de 28. J'ai donc inversé le dernier chèque.
// this isn't set up for good processing.
//I don't know what data set has the expiration
//dates of your accounts. I assume a list.
// matchfound is a single variablethat returns true if any 1 record is expired.
bool matchFound = false;
DateTime dateOfExpiration = DateTime.Today.AddDays(-30);
List<DateTime> accountExpireDates = new List<DateTime>();
foreach (DateTime date in accountExpireDates)
{
if (DateTime.Compare(dateOfExpiration, date) != -1)
{
matchFound = true;
}
}
En supposant que vous souhaitiez affecter false
(le cas échéant) à matchtime
, une manière plus simple de l'écrire serait ..
matchtime = ((expiryDate - DateTime.Now).TotalDays < 30) ? true : false;
Non, la fonction Comparer renverra 1, 0 ou -1. 0 lorsque les deux valeurs sont égales, -1 et 1 signifient inférieur et supérieur à, je crois dans cet ordre, mais je les mélange souvent.
Non, vous ne l'utilisez pas correctement.
Voir ici pour plus de détails.
DateTime t1 = new DateTime(100);
DateTime t2 = new DateTime(20);
if (DateTime.Compare(t1, t2) > 0) Console.WriteLine("t1 > t2");
if (DateTime.Compare(t1, t2) == 0) Console.WriteLine("t1 == t2");
if (DateTime.Compare(t1, t2) < 0) Console.WriteLine("t1 < t2");