web-dev-qa-db-fra.com

DateTime.Compare comment vérifier si une date a moins de 30 jours?

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;
}
75
James May

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 DateTimes. 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.

204
Konrad Rudolph

devrait être

matchFound = (expiryDate - DateTime.Now).TotalDays < 30;

pas le nombre total de jours sinon vous aurez un comportement étrange

14
Luke

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 ...

7
haqwin

Essayez ceci à la place

if ( (expiryDate - DateTime.Now ).TotalDays < 30 ) { 
  matchFound = true;
}
5
JaredPar

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;
    }
3
Mitch Wheat

Cela vous donnera un résultat précis:

if ((expiryDate.Date - DateTime.Now.Date).Days < 30)
    matchFound = true;
1
Jayant

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.

1
rob

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.

0
GWLlosa

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;
}
0
Canavar

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.

0
SBergstrom
// 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;
            }
            }
0
Alex

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;
0
Master Mick

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.

0
Timothy Carter

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");
0
David Basarab