按季度计算日期的最好方法是什么?
本文关键字:方法 是什么 季度 计算 日期 | 更新日期: 2023-09-27 18:06:35
我有一个日期集合:
IEnumerable<DateTime> Events;
我想计数并将其分成季度(2011年第一季度,2011年第二季度等),每个季度代表三个月的桶。
我开始用一个循环和一个单独的字典"手动"完成这个转换,但我认为可能有一种更优雅的方法,使用LINQ等来完成这个转换。
我想以这样的数据结构结束:
public List<QuarterInfo> QuarterBreakdown
其中QuarterInfo只是:
public class QuarterInfo
{
public int QuarterOfYear; //1, 2, 3 or 4
public int Year;
public IEnumerable<DateTime> Events;
}
注意,以上是我的想法,但我更愿意接受其他方法的建议。
Pure LINQ, using GroupBy
:
var result = Events
.Select(d => new { DateTime = d, Q = (d.Month - 1) / 3 })
.GroupBy(a => new { a.Q, a.DateTime.Year })
.Select(a => new QuarterInfo
{
Events = a.Select(s => s.DateTime),
QuarterOfYear = a.Key.Q + 1
});
var QuarterBreakdown =
from date in Events
group date by date.Year * 4 + (date.Month - 1) / 3 into quarters
select new QuarterInfo
{
Events = quarters,
Year = quarters.Key / 4,
QuarterOfYear = quarters.Key % 4 + 1
};