【问题标题】:how to compare month-year with DateParse如何将月份年份与 DateParse 进行比较
【发布时间】:2011-10-24 09:31:11
【问题描述】:

我必须检查日期(月-年)是否小于实际日期。

我知道如何只用一个月或一年来做,比如

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...

【问题讨论】:

  • 你现在有什么问题?
  • Parse 会一直为您工作吗?解析一次,然后使用解析实例中的值,会更简单
  • 例如,我必须检查 10-2011(现在)是否介于 01-2011 和 04-2012 之间...
  • 为什么会有三个日期?还有比 o.MyDate 和 DateTime.Now 更多的日期吗?

标签: c# datetime


【解决方案1】:

如果年份相同,则比较月份,如果年份不同,则您的年份必须小于现在:

var yourDate = ...;
if((yourDate.Year == DateTime.Now.Year && 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 && yourDate.Month >= lowerBoundMonth) || 
    yourDate.Year > lowerBoundYear
   ) &&
   ((yourDate.Year == upperBoundYear && 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 <.
}

【讨论】:

  • 我已经更新了我的目标。它不适用于此代码。抱歉,不清楚 :) 希望现在你能明白我在找什么......
  • 我知道如何使用单月或单年来做到这一点。但不是我问的:) 我是否可以直接检查 pari month-year...
  • @markzzz:我的回答完全符合您的要求。它检查某个日期是否在日期范围内。 Month/Year 也是一个日期,它相当于 01/Month/Year。请尝试再次理解代码。我更新了我的答案以使其更加明确。
  • 是的,但是检查第一年,而不是月份。不是直接年月。这就是我问的......但如果我做不到,我会使用你自己的代码:)
  • 谢谢你,非常简单但同时也非常困难......还有更多当你有几天不断编码......
【解决方案2】:
var date1 = new DateTime(year1, month1, 1);
var date2 = new DateTime(year2, month2, 1);

if(date1 < date2)...

【讨论】:

    【解决方案3】:
    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 && 
                         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;
    

    【讨论】:

      【解决方案4】:
      DateTime dateCheck = DateTime.Parse(o.MyDate);
      bool result = ((Now.Month - dateCheck.Month) + 12 * (Now.Year - dateCheck.Year)) > 0
      

      【讨论】:

        【解决方案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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-09-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-07-09
          • 1970-01-01
          相关资源
          最近更新 更多