如何检查DateTime范围是否在另一个3个月的DateTime范围内

Jam*_*mie 7 c# asp.net-3.5

嗨,我有一个数据库中每条记录的开始日期和结束日期.

我需要检查时间段在两年内分为两个季度的位置,然后显示每个记录所属的季度.

第1季度包括6月9日,7月9日,8月9日第
2季度包括9月9日,10月9日,11月9日第
3季度包括12月9日,1月10日,2
月10日第4季度包括3月10日,4月10日,5月10日
Quaretr 5包括6月10日, 7月10日......

例如01/10/09 - 01/06/10将分为第2,3,4和5季度

我是.NET的新手,所以任何例子都会非常感激.

Joe*_*win 0

您可以按如下方式调用 IntervalInQuarters:

IntervalInQuarters(new DateTime(2007, 10, 10), new DateTime(2009, 10, 11));
Run Code Online (Sandbox Code Playgroud)

该函数返回季度开始日期的列表。请注意,搜索的宿舍范围是在函数本身内定义的。请根据您的情况进行适当编辑。他们的关键点是确保间隔/季度交叉点逻辑正确。

private List<DateTime> IntervalInQuarters(DateTime myStartDate, DateTime myEndDate)
{
    DateTime quarterStart = new DateTime(2006, 06, 01);
    DateTime nextQuarterStart = new DateTime(2006, 09, 01);
    DateTime finalDate = new DateTime(2011, 01, 01);
    List<DateTime> foundQuarters = new List<DateTime>();

    while (quarterStart < finalDate)
    {
        // quarter intersects interval if:
        // its start/end date is within our interval
        // our start/end date is within quarter interval
        DateTime quarterEnd = nextQuarterStart.AddDays(-1);
        if (DateInInterval(myStartDate, quarterStart, quarterEnd) ||
            DateInInterval(myEndDate, quarterStart, quarterEnd) ||
            DateInInterval(quarterStart, myStartDate, myEndDate) ||
            DateInInterval(quarterEnd, myStartDate, myEndDate))
        {
            foundQuarters.Add(quarterStart);
        }

        quarterStart = nextQuarterStart;
        nextQuarterStart = nextQuarterStart.AddMonths(3);
    }

    return foundQuarters;
}

private bool DateInInterval(DateTime myDate, DateTime intStart, DateTime intEnd)
{
    return ((intStart <= myDate) && (myDate <= intEnd));
}
Run Code Online (Sandbox Code Playgroud)