C# 检查间隔之间的日期范围
本文关键字:日期 范围 之间 检查 | 更新日期: 2023-09-27 18:36:18
我需要一些清晰的头脑来检查另一个间隔之间的日期范围是否为假。以下是正在发生的事情:
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现在我想检查用户是否选择了两个日期,例如 1/1/2013 和 1/1/2014 选择落在数组的第一个元素(日期 [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;
}
}
这一直到用户选择仅位于数组的一个元素之间的日期范围为止。例如,如果选择是 1/30/2012 - 5/30/2012,则开始 = 日期[0] 并且结束 = 日期[0]我知道我可以简单地在最后声明如果结束 == 未分配然后结束 = 开始,但我认为纠正算法比在最后应用补丁更好谢谢
将您的日期范围成对存储,就像从头到尾一样,结束的下一个开始位置 - 1 天。
使代码中的内容更加清晰。
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
}