#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