最近完成的季度

Ian*_*ink 12 .net c# date

是否有一个C#函数会给我一个日期最近完成的季度的最后一天?

例如,

var lastDayOfLastQuarter = SomeFunction(jan 3, 2010);
Run Code Online (Sandbox Code Playgroud)

将设置lastDayOfLastQuarter = 2009年12月31日

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则可以轻松修改该方法以处理此问题.

  • +1 - 简单,可扩展,易于验证和理解.爱它. (2认同)