嗨,我有一个数据库中每条记录的开始日期和结束日期.
我需要检查时间段在两年内分为两个季度的位置,然后显示每个记录所属的季度.
第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的新手,所以任何例子都会非常感激.
您可以按如下方式调用 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)