как сравнить месяц-год с анализом даты

#c# #datetime

#c# #datetime

Вопрос:

Я должен проверить, является ли дата (месяц-год) меньше фактической даты.

Я знаю, как это сделать только с одним месяцем или годом, например

 DateTime.Parse(o.MyDate).Month <= DateTime.Now.Month
  

или

 DateTime.Parse(o.MyDate).Year <= DateTime.Now.Year
  

но как я могу напрямую проверить, является ли month-year меньше, чем now.month-now.year?

Редактировать

Что мне нужно сделать, так это, например, проверить, находится ли 10-2011 (DateTime.Now.Month-DateTime.Now.Year) между 01-2011 и 04-2012…

Комментарии:

1. Что не так с тем, что у вас есть сейчас?

2. Parse Всегда будет работать для вас? проанализируйте его один раз, а затем поиграйте со значениями из проанализированного экземпляра, было бы проще

3. например, я должен проверить, находится ли 10-2011 (сейчас) между 01-2011 и 04-2012…

4. Почему существует три даты? Есть ли еще какие-либо даты, кроме o.myDate и DateTime.Now?

Ответ №1:

Если годы совпадают, сравните месяцы, если годы не совпадают, ваш год должен быть меньше, чем сейчас:

 var yourDate = ...;
if((yourDate.Year == DateTime.Now.Year amp;amp; yourDate.Month < DateTime.Now.Month)
   || yourDate.Year < DateTime.Now.Year)
{
    // yourDate is smaller than todays month.
}
  

Обновить:

Чтобы проверить, находится ли yourDate он в определенном временном диапазоне, используйте это:

 var yourDate = ...;
var lowerBoundYear = 2011;
var lowerBoundMonth = 1;
var upperBoundYear = 2012;
var upperBoundMonth = 4;

if(((yourDate.Year == lowerBoundYear amp;amp; yourDate.Month >= lowerBoundMonth) || 
    yourDate.Year > lowerBoundYear
   ) amp;amp;
   ((yourDate.Year == upperBoundYear amp;amp; yourDate.Month <= upperBoundMonth) ||
    yourDate.Year < lowerBoundYear
   ))
{
    // yourDate is in the time range 01/01/2011 - 30/04/2012
    // if you want yourDate to be in the range 01/02/2011 - 30/04/2012, i.e. 
    // exclusive lower bound, change the >= to >.
    // if you want yourDate to be in the range 01/01/2011 - 31/03/2012, i.e.
    // exclusive upper bound, change the <= to <.
}
  

Комментарии:

1. Я обновил свою цель. Это не будет работать с этим кодом. Извините, не было ясно 🙂 Надеюсь, теперь вы понимаете, что я ищу…

2. Я знаю, как это сделать, используя один месяц или год. Но это не то, что я спросил 🙂 Это если я могу напрямую проверить pari month-year…

3. @markzzz: Мой ответ проверяет именно то, что вы спросили. Он проверяет, находится ли определенная дата в диапазоне дат. Месяц / Год — это тоже дата, она эквивалентна 01 / Месяц / год. Пожалуйста, попробуйте еще раз понять код. Я обновил свой ответ, чтобы сделать его более четким.

4. да, но проверка первого года, а не месяца. не напрямую год-месяц. Это то, что я спросил … но хорошо, если я не смогу этого сделать, я буду использовать ваш собственный код 🙂

5. Спасибо, очень просто, но в то же время очень сложно… И многое другое, когда у вас есть несколько дней непрерывного кодирования…

Ответ №2:

 var date = DateTime.Parse(o.MyDate);
var year = date.Year;

// We don't even want to know what could happen at 31 Dec 23.59.59 :-)
var currentTime = DateTime.Now;
var currentYear = currentTime.Year;

bool result = year < currentYear || 
                 (year == currentYear amp;amp; 
                     date.Month <= currentTime.Month)
  

Второй вариант:

 var date = DateTime.Parse(o.MyDate).Date; // We round to the day
date = date.AddDays(-date.Day); // and we remove the day

var currentDate = DateTime.Now.Date;
currentDate = currentDate.AddDays(-currentDate.Day);

bool result = date <= currentDate;
  

Третий вариант (возможно, более «олдскульный»)

 var date = DateTime.Parse(o.MyDate);
var currentTime = DateTime.Now;

// Each year can be subdivided in 12 parts (the months)
bool result = date.Year * 12   date.Month <= currentTime.Year * 12   currentTime.Month;
  

Ответ №3:

 DateTime dateCheck = DateTime.Parse(o.MyDate);
bool result = ((Now.Month - dateCheck.Month)   12 * (Now.Year - dateCheck.Year)) > 0
  

Ответ №4:

 var date1 = new DateTime(year1, month1, 1);
var date2 = new DateTime(year2, month2, 1);

if(date1 < date2)...
  

Ответ №5:

 Date date1 = new Date(2011, 1, 1, 0, 0, 0);
Date date2 = new Date(2011, 2, 1, 0, 0, 0);

int result = DateCompare(date1, date2);
  

если результат равен < 0, то date1 < date2
если результат равен 0, то date1 == date2
если результат равен> 0, то date1> date2