我试图找到两个给定日期之间的所有季度。
例如,如果当前日期是今天(2013 年 1 月 15 日)并且过去的日期是 2012 年 1 月 1 日,我应该得到以下结果: 2012 年 12 月 2012 年 9 月 2012 年 6 月 2012 年 3 月
我可以从当前日期开始继续扣除 3 个月,但这并不准确,因为下面的测试表明:
[TestMethod]
public void FindAllQuaters_FromAGivenDate_TillAPastDate()
{
var dateFinder = new FindQuarter();
//Between Feb 2013 & Jan 2012
var dates = dateFinder.GetAllQuarters(new DateTime(2013, 02, 01), new DateTime(2012, 01, 01)).ToList();
Assert.IsTrue(dates.Count == 4);
Assert.IsTrue(dates.First().Month == 12);
Assert.IsTrue(dates.First().Year == 2012);
Assert.IsTrue(dates.Skip(1).First().Month == 9);
Assert.IsTrue(dates.Skip(1).First().Year == 2012);
Assert.IsTrue(dates.Skip(2).First().Month == 6);
Assert.IsTrue(dates.Skip(2).First().Year == 2012);
Assert.IsTrue(dates.Skip(3).First().Month == 3);
Assert.IsTrue(dates.Skip(3).First().Year == 2012);
}
}
public class FindQuarter
{
public IEnumerable<DateTime> GetAllQuarters(DateTime current, DateTime past)
{
while (current > past)
{
current = current.AddMonths(-3);
yield return current;
}
}
}
我怎样才能做到这一点?季度定义为 3 月、6 月、9 月和 12 月。我还需要那个月的最后一个日期(我希望很快)。
编辑:这不起作用,因为它会从给定日期减去 3 个月,例如,如果当前日期是 2013 年 2 月并且我减少了 3 个月,我得到的是 2012 年 11 月而不是 2012 年 12 月。
一月,二月,三月的任何日期都属于第一季度,即三月
四月,五月,六月的任何日期都属于第二季度,即六月
七月、八月、九月的任何日期都属于第三季度,即九月
10 月、11 月、12 月的任何日期都属于第四季度,即 12 月