Подтвердить что ты не робот

DateTime.Compare, как проверить, является ли дата менее 30 дней?

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

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

{
     matchFound = true;
}
4b9b3361

Ответ 1

Я правильно использую DateTime Compare?

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

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

Это вычитает два DateTime s. Результатом является объект TimeSpan, который имеет свойство TotalDays.

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

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

Нет if.

Ответ 2

должен быть

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

отметить общие дни иначе вы получите werid поведение

Ответ 3

Хорошо, я сделал бы это так:

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

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

Ответ 4

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

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

Ответ 5

Сравнить возвращает 1, 0, -1 больше, чем, меньше, чем, соответственно.

Вы хотите:

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

Ответ 6

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

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

Ответ 7

Сравнить не нужно, Дни/ TotalDays не нужны.

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

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

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

Ответ 8

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

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

Ответ 9

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

Ответ 10

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

Подробнее см. здесь.

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

Ответ 11

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

Ответ 12

Нет, это не так, попробуйте следующее:

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

Ответ 13

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

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

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

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

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

Ответ 14

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

Ответ 15

Вы можете попробовать сделать так:

var daysPassed = (DateTime.UtcNow - expiryDate).Days;
if (daysPassed > 30)
{ 
    // ...
}