示例:给定日期范围的连续列表
List[0] = from 2001 Jan 01 to 2001 Aug 14
List[1] = from 2001 Aug 15 to 2002 Jul 10
假设一个财政年度是从 7 月 1 日到(明年)6 月 30 日,所以输出应该是
AnotherList[0] = from 2000 Jul 01 to 2001 Jun 30
period: 2001 Jan 01 to 2001 Jun 30
AnotherList[1] = from 2001 July 01 to 2002 Jun 30
period: 2001 Jul 01 to 2001 Aug 14 period: 2001 Aug 15 to 2002 Jun 30
AnotherList[2] = from 2002 July 01 to 2003 Jun 30
period: 2002 Jul 01 to 2002 Jul 10
同样,手动计算非常容易,但我的方法包含近 100 行代码,其中包含 if else、foreach 和 while 循环的组合,我认为这很丑陋。我正在尝试简化算法,以便更容易维护和调试。提前致谢。
最佳答案
你可以通过 GroupBy
变得聪明起来
// Beginning of earliest financial year
var start = new DateTime(2000,7,1);
var range = Enumerable.Range(0,365*2);
// Some random test data
var dates1 = range.Select(i => new DateTime(2001,1,1).AddDays(i) );
var dates2 = range.Select(i => new DateTime(2003,1,1).AddDays(i) );
// Group by distance in years from beginning of earliest financial year
var finYears =
dates1
.Concat(dates2)
.GroupBy(d => d.Subtract(start).Days / 365 );
这给出了 IEnumerable<IGrouping<int, DateTime>>
每个外部枚举包含单个财政年度中 2 个列表中的所有日期。
关于c# - 如何在 C# 中将连续日期范围列表切入财政年度列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3286526/