я использование, которое DateTime Сравнивают правильно?
№ Compare
только предлагает информацию об относительном положении двух дат: меньше, равный или больше. То, что Вы хотите, является чем-то вроде этого:
if ((expiryDate - DateTime.Now).TotalDays < 30)
matchFound = true;
Это вычитает два DateTime
с. Результат TimeSpan
объект, который имеет TotalDays
свойство.
Кроме того, условное выражение может быть записано непосредственно как:
matchFound = (expiryDate - DateTime.Now).TotalDays < 30;
Никакой if
необходимый.
То, что Вы хотите сделать, вычитают два DateTimes (expiryDate и DateTime. Теперь). Это возвратит объект типа TimeSpan. TimeSpan имеет свойство "Days". Сравните то число с 30 для Вашего ответа.
Нет это не корректно, попробуйте это:
DateTime expiryDate = DateTime.Now.AddDays(-31);
if (DateTime.Compare(expiryDate, DateTime.Now.AddDays(-30)) < 1)
{
matchFound = true;
}
Нет, Сравнить функция возвратится или 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");
Сравните возвраты 1, 0,-1 для большего, чем, равный, меньше, чем, соответственно.
Вы хотите:
if (DateTime.Compare(expiryDate, DateTime.Now.AddDays(30)) <= 0)
{
bool matchFound = true;
}
Попробуйте это вместо этого
if ( (expiryDate - DateTime.Now ).TotalDays < 30 ) {
matchFound = true;
}
Хорошо я сделал бы это как это вместо этого:
TimeSpan diff = expiryDate - DateTime.Today;
if (diff.Days > 30)
matchFound = true;
Выдерживают сравнение, только отвечает целочисленной погодой указания, которая первое ранее, то же или позже...
Можно попытаться сделать как это:
var daysPassed = (DateTime.UtcNow - expiryDate).Days;
if (daysPassed > 30)
{
// ...
}
должно быть
matchFound = (expiryDate - DateTime.Now).TotalDays < 30;
обратите внимание на общее количество дней иначе вы получите странное поведение