c# - 如何在 C# 中将连续日期范围列表切入财政年度列表?

标签 c# .net datetime

示例:给定日期范围的连续列表

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/

相关文章:

c# - 在 Unity Animator 中使用 "Any State"的问题

.net - Hadoop 将代码引入数据是实现规模化的唯一途径吗?

c# - .Net Socket Read 功能阻塞问题

ruby - DataMapper 日期时间条件

c# - 如何使用 WebClient.UploadString 方法下载图片?

c# - 稍微不平凡的数据结构 : is XmlSerializer right for me?

c# - 你能改进这个 C# 正则表达式代码吗?

.net - Nullable Enum 可空类型问题

sql - Sybase:如何以 mm/dd/yyyy 格式获取当前日期?

ruby - 使用 Ruby (DateTime) 检索月份的第一天和最后一天