14 ответов:
я использую DateTime сравнить правильно?
нет.
Compareтолько предлагает информацию об относительном положении двух дат: меньше, равно или больше. То, что вы хотите, это что-то вроде этого:if ((expiryDate - DateTime.Now).TotalDays < 30) matchFound = true;это вычитает два
DateTimeы. В результате получается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;сравнить отвечает только с целым числом, указывающим погоду первый раньше, то же самое или позже...
сравнить возвращает 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 }Примечание это будет работать, если вы решите использовать минуты или месяцы или даже годы в качестве критериев истечения срока действия.
нет, функция сравнения возвращает либо 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");
то, что вы хотите сделать, это вычесть две даты (expiryDate и DateTime.Теперь.) Это вернет объект типа 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 и мой срок годности был 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; } }
Если вы хотите назначить
false(если применимо)matchtime, более простой способ написания это будет..matchtime = ((expiryDate - DateTime.Now).TotalDays < 30) ? true : false;
Comments