значение datetime.Сравните, как проверить, если дата меньше, чем 30 дней?



Я пытаюсь решить, если срок действия учетной записи истекает менее чем через 30 дней. Правильно ли я использую DateTime Compare?



if (DateTime.Compare(expiryDate, now) < 30)

{
matchFound = true;
}
579   14  

14 ответов:

я использую DateTime сравнить правильно?

нет. Compare только предлагает информацию об относительном положении двух дат: меньше, равно или больше. То, что вы хотите, это что-то вроде этого:

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

это вычитает два DateTimeы. В результате получается TimeSpan объект, который имеет TotalDays собственность.

кроме того, условное может быть записано непосредственно как:

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

нет if нужны.

должно быть

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

обратите внимание на общее количество дней в противном случае вы получите werid поведения

Ну я бы сделал это так вместо этого:

TimeSpan diff = expiryDate - DateTime.Today;
if (diff.Days > 30) 
   matchFound = true;

сравнить отвечает только с целым числом, указывающим погоду первый раньше, то же самое или позже...

попробуйте это вместо

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

сравнить возвращает 1, 0, -1 для Больше, равно, меньше, соответственно.

вы хотите:

    if (DateTime.Compare(expiryDate, DateTime.Now.AddDays(30)) <= 0) 
    { 
        bool matchFound = true;
    }

Это даст вам точный результат :

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

сравнить - это лишнее, дней/TotalDays ненужны.

все, что вам нужно-это

if (expireDate < DateTime.Now) {
    // has expired
} else {
    // not expired
}

Примечание это будет работать, если вы решите использовать минуты или месяцы или даже годы в качестве критериев истечения срока действия.

нет, функция сравнения возвращает либо 1, 0, либо -1. 0 когда два значения равны, -1 и 1 означают меньше и больше, я верю в этот порядок, но я часто смешиваю их.

нет, вы не используете его правильно.

посмотреть здесь для сведения.

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

то, что вы хотите сделать, это вычесть две даты (expiryDate и DateTime.Теперь.) Это вернет объект типа TimeSpan. TimeSpan имеет свойство "дни". Сравните это число с 30 для вашего ответа.

нет, это не правильно, попробуйте это :

DateTime expiryDate = DateTime.Now.AddDays(-31);
if (DateTime.Compare(expiryDate, DateTime.Now.AddDays(-30)) < 1)
{
    matchFound = true;
}

на самом деле ни один из этих ответов работал для меня. Я решил это, сделав так:

  if ((expireDate.Date - DateTime.Now).Days > -30)
  {
    matchFound = true;
  }

когда я попытался сделать это:

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

сегодня, 2011-11-14 и мой срок годности был 2011-10-17 я получил, что matchFound = -28. Вместо 28. Поэтому я перевернул последний чек.

// 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;
            }
            }

Если вы хотите назначить false (если применимо)matchtime, более простой способ написания это будет..

matchtime = ((expiryDate - DateTime.Now).TotalDays < 30) ? true : false;

Comments

    Ничего не найдено.