DateTime.Compare, как проверить, если дата меньше 30 дней?
Я пытаюсь решить, если срок действия учетной записи истекает менее чем за 30 дней. Я правильно использую DateTime Compare?
if (DateTime.Compare(expiryDate, now) < 30)
{
matchFound = true;
}
14 ответов
Я правильно использую 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;
обратите внимание на общее количество дней, иначе вы получите странное поведение
Ну, я бы сделал это так:
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;
}
Предполагая, что вы хотите назначить false
(если применимо) к matchtime
, проще было бы написать это..
matchtime = ((expiryDate - DateTime.Now).TotalDays < 30) ? true : false;
Сравнение не нужно, дни / полные дни не нужны.
Все, что тебе нужно
if (expireDate < DateTime.Now) {
// has expired
} else {
// not expired
}
обратите внимание, что это сработает, если вы решите использовать минуты, месяцы или даже годы в качестве критериев истечения срока действия.
Это даст вам точный результат:
if ((expiryDate.Date - DateTime.Now.Date).Days < 30)
matchFound = true;
Что вы хотите сделать, это вычесть два DateTimes (expiryDate и DateTime.Now). Это вернет объект типа TimeSpan. TimeSpan имеет свойство "Дни". Сравните это число с 30 для вашего ответа.
Нет, вы не используете это правильно.
Смотрите здесь для деталей.
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");
Можно попробовать сделать так:
var daysPassed = (DateTime.UtcNow - expiryDate).Days;
if (daysPassed > 30)
{
// ...
}
На самом деле ни один из этих ответов не работал для меня. Я решил это, сделав так:
if ((expireDate.Date - DateTime.Now).Days > -30)
{
matchFound = true;
}
Когда я попытался сделать это:
matchFound = (expiryDate - DateTime.Now).Days < 30;
Сегодня 2011-11-14 и моя дата истечения срока действия была 2011-10-17, я получил этот matchFound = -28. Вместо 28. Так что я перевернул последнюю проверку.
Нет, функция сравнения вернет 1, 0 или -1. 0, когда два значения равны, -1 и 1 означают меньше и больше чем, я верю в этом порядке, но я часто смешиваю их.
Нет, это не правильно, попробуйте это:
DateTime expiryDate = DateTime.Now.AddDays(-31);
if (DateTime.Compare(expiryDate, DateTime.Now.AddDays(-30)) < 1)
{
matchFound = true;
}
// 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;
}
}