c#检查一个间隔之间的日期范围

时间:2012-06-03 15:13:55

标签: c# datetime compare

我需要一些清醒的头脑来检查另一个间隔之间的日期范围是否为假。这是最新发生的事情:

DateTime[] dates = new DateTime[20];
dates[0] = Convert.ToDateTime(initial_date);
for (int i = 1; i <= 19; i++)
{
dates[i] = initial_date.AddYears(i);
}

所以我有一个存储20个日期的数组。如果initial_date = 1/20/2012,则数组从日期[0] = 1/20/2012到日期[19] = 1/20/2031 现在我想检查用户是否选择两个日期,例如2013年1月1日和2014年1月1日,选择落在数组的第一个元素(日期[0])和第二个元素(日期[1]之间) )。到目前为止:

DateTime a1 = Convert.ToDateTime(vtable.Rows[0][0]);
DateTime a2 = Convert.ToDateTime(vtable.Rows[vtable.Rows.Count - 1][0]);
DateTime start = DateTime.MinValue;
DateTime end = DateTime.MaxValue;
for (int i = 0; i < 20; i++)
            {
                if (a1.CompareTo(dates[i]) >= 0)
                {
                    start = dates[i];
                    for (int j = 19; j > 0 ; j--)
                    {
                        if (a2.CompareTo(dates[j]) >= 0)
                        {
                            end = dates[j]; 
                            break;
                        }
                    }
                    break;
                }
            }

当用户选择仅落在数组的一个元素之间的日期范围时,这就达到了这一点。例如,如果选择是2012年1月30日 - 2012年5月30日,那么start = date [0]和end = date [0] 我知道我可以简单地说,如果结束==未分配然后结束=开始,但我认为纠正算法比最后应用补丁更好 非常感谢你

2 个答案:

答案 0 :(得分:0)

var rangeMax = dates.Max();
var rangeMin = dates.Min();

DateTime a1 = Convert.ToDateTime(vtable.Rows[0][0]);
DateTime a2 = Convert.ToDateTime(vtable.Rows[vtable.Rows.Count - 1][0]);

if ((a1 > rangeMin) && (a1 < rangeMax) && (a2 > rangeMin) && (a2 < rangeMax))
{
    //dates are in given range 
}

答案 1 :(得分:0)

将您的日期范围存储为成对的,从开始到结束,接下来开始结束 - 1天。

使代码更加清晰。