指定された2つの日付の間のすべての四半期を検索しようとしています。
たとえば、現在の日付が今日(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年12月ではなく2012年11月になります。
1月、2月、3月の日付は、第1四半期、つまり3月に属します。
4月、5月、6月の日付は、第2四半期、つまり6月に属します。
7月、8月、9月の日付は、第3四半期、つまり9月に属します。
10月、11月、12月の日付は、第4四半期、つまり12月に属します。