Я пытаюсь работать, если срок действия учетной записи истекает менее чем за 30 дней. Я правильно использую DateTime Compare?
if (DateTime.Compare(expiryDate, now) < 30)
{
matchFound = true;
}
Я пытаюсь работать, если срок действия учетной записи истекает менее чем за 30 дней. Я правильно использую DateTime Compare?
if (DateTime.Compare(expiryDate, now) < 30)
{
matchFound = true;
}
Я правильно использую DateTime Compare?
Нет. Compare
предлагает только информацию об относительном положении двух дат: меньше, равно или больше. Вы хотите что-то вроде этого:
if ((expiryDate - DateTime.Now).TotalDays < 30)
matchFound = true;
Это вычитает два DateTime
s. Результатом является объект 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
}
Обратите внимание, что это будет работать, если вы решите использовать минуты или месяцы или даже годы в качестве критериев истечения срока действия.
Предполагая, что вы хотите назначить false
(если применимо) на matchtime
, более простым способом было бы написать это.
matchtime = ((expiryDate - DateTime.Now).TotalDays < 30);
Нет, функция Compare вернет либо 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");
Что вы хотите сделать, это вычесть два DateTimes (expiryDate и DateTime.Now). Это вернет объект типа 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, и мой expiryDate был 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;
}
}
Вы можете попробовать сделать так:
var daysPassed = (DateTime.UtcNow - expiryDate).Days;
if (daysPassed > 30)
{
// ...
}