是否有一个C#函数会给我一个最近完成的季度的最后一天给出一个日期?
例如,
var lastDayOfLastQuarter = SomeFunction(jan 3, 2010);
将设置lastDayOfLastQuarter = 2009年12月31日
答案 0 :(得分:26)
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),
};
}
用法:
DateTime date = new DateTime(2010, 1, 3);
DateTime quarterEnd = date.NearestQuarterEnd();
此方法的优势在于,如果您有一个奇数的季度定义(例如,会计年度与日历年不同),则可以轻松修改方法QuartersInYear
以处理此问题。
答案 1 :(得分:2)
试试这个:
AddMonths(-(d.Month-1) % 3))
将日期值移至季度中第一个月的等效日,然后AddDays (-day)
移回上个月的最后一天。
DateTime d = Datetime.Now;
DateTime lastDayOfLastQuarter = d.AddMonths(-((d.Month-1)%3)).AddDays(-d.Day);
答案 2 :(得分:2)
假设季度总是以3个月的间隔结束,您可以这样做:
与其他提供的解决方案相比,可能不是最佳解决方案,但非常容易阅读和修改。
public DateTime LastDayOfLastQuarter(DateTime date)
{
int result = (int)(date.Month/3)
switch (result)
{
// January - March
case 0:
return new DateTime(date.Year - 1, 12, 31);
// April - June
case 1:
return new DateTime(date.Year, 3, 31);
// July - September
case 2:
return new DateTime(date.Year, 6, 30);
// October - December
case 3:
return new DateTime(date.Year, 9, 30);
}
}
答案 3 :(得分:2)
一个简单的函数可以计算最近完成的月份的最后几天:
public static DateTime LastQuarter(DateTime date)
{
return new DateTime(date.Year, date.Month - ((date.Month - 1) % 3), 1).AddDays(-1);
}
答案 4 :(得分:1)
这是一个简单的功能,可以为您提供当前季度的最后一天(假设您使用的是标准日历)。
DateTime LastDayOfQuarter(DateTime today)
{
int quarter = (today.Month-1) / 3;
int lastMonthInQuarter = (quarter +1) * 3;
int lastDayInMonth = DateTime.DaysInMonth(today.Year, lastMonthInQuarter);
return new DateTime(today.Year, lastMonthInQuarter, lastDayInMonth);
}
希望有所帮助。
答案 5 :(得分:1)
Func<int, int> q = (i) => { return ((i - 1) / 3) + 1; };
测试:
Enumerable.Range(1, 12).Select(i => q(i));
答案 6 :(得分:0)
您可以使用简单的switch语句来检查给定日期的哪个季度,并返回该季度的最后一天。