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

77
задан David Basarab 9 February 2009 в 14:41
поделиться

10 ответов

я использование, которое DateTime Сравнивают правильно?

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

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

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

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

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

Никакой if необходимый.

206
ответ дан Konrad Rudolph 6 November 2019 в 03:28
поделиться

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

0
ответ дан GWLlosa 6 November 2019 в 03:28
поделиться

Нет это не корректно, попробуйте это:

DateTime expiryDate = DateTime.Now.AddDays(-31);
if (DateTime.Compare(expiryDate, DateTime.Now.AddDays(-30)) < 1)
{
    matchFound = true;
}
0
ответ дан Canavar 6 November 2019 в 03:28
поделиться

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

0
ответ дан Timothy Carter 6 November 2019 в 03:28
поделиться

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

См. здесь для деталей.

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 6 November 2019 в 03:28
поделиться

Сравните возвраты 1, 0,-1 для большего, чем, равный, меньше, чем, соответственно.

Вы хотите:

    if (DateTime.Compare(expiryDate, DateTime.Now.AddDays(30)) <= 0) 
    { 
        bool matchFound = true;
    }
3
ответ дан Mitch Wheat 6 November 2019 в 03:28
поделиться

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

if ( (expiryDate - DateTime.Now ).TotalDays < 30 ) { 
  matchFound = true;
}
5
ответ дан JaredPar 6 November 2019 в 03:28
поделиться

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

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

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

7
ответ дан haqwin 6 November 2019 в 03:28
поделиться

Можно попытаться сделать как это:

var daysPassed = (DateTime.UtcNow - expiryDate).Days;
if (daysPassed > 30)
{ 
    // ...
}
0
ответ дан 24 November 2019 в 10:46
поделиться

должно быть

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

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

14
ответ дан 24 November 2019 в 10:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: