jas*_*son 27
public static DateTime NearestQuarterEnd(this DateTime date) {
IEnumerable<DateTime> candidates =
QuartersInYear(date.Year).Union(QuartersInYear(date.Year - 1));
return candidates.Where(d => d < date.Date).OrderBy(d => d).Last();
}
static IEnumerable<DateTime> QuartersInYear(int year) {
return new List<DateTime>() {
new DateTime(year, 3, 31),
new DateTime(year, 6, 30),
new DateTime(year, 9, 30),
new DateTime(year, 12, 31),
};
}
Run Code Online (Sandbox Code Playgroud)
用法:
DateTime date = new DateTime(2010, 1, 3);
DateTime quarterEnd = date.NearestQuarterEnd();
Run Code Online (Sandbox Code Playgroud)
这种方法的优点在于,如果您有一个奇怪的季度定义(例如,会计年度与日历年不同),QuartersInYear则可以轻松修改该方法以处理此问题.