c# - 如何从按周、月、季度或年分组的随机日期列表中提取最大日期?

标签 c# linq date calendar

给定一个随机日期列表,是否有优雅的 C# 方法(LINQ 或其他方式)提取列表中的最后一个日期,按周、月、季度或年分组?

我希望这很清楚,但如果没有,请使用这组日期示例:

  • 2018 年 1 月 1 日星期一
  • 2018 年 2 月 1 日星期二
  • 2018 年 1 月 4 日星期四
  • 2018 年 9 月 1 日星期二
  • 2018 年 1 月 11 日星期四
  • 2018 年 1 月 12 日星期五
  • 22/01/2018 星期一
  • 2018 年 1 月 23 日星期二
  • 2018 年 1 月 24 日,星期三
  • 2018 年 1 月 31 日,星期三
  • 2018 年 1 月 2 日星期四
  • 2018 年 2 月 27 日星期二

按周提取最大值

  • Thu 04/01/2018 = 示例中第一周的最后一个日期
  • Fri 12/01/2018 = 示例中第二周的最后一个日期
  • 2018 年 1 月 24 日星期三 = 等
  • 2018 年 1 月 2 日星期四
  • 2018 年 2 月 27 日星期二

按月提取最大值

  • Wed 31/01/2018 = 样本中 1 月的最后一个日期
  • Tue 27/02/2018 = 示例中 2 月的最后一个日期

我需要能够按周数、日历月、日历季度和日历年进行提取。

我什至不确定如何开始。所以目前我没有代码可以分享。

任何想法都将非常受欢迎。

澄清:此处包含工作日名称是为了我们人类的利益。我的实际日期是正确的 DateTime 类型。因此代码不需要将字符串解析为日期时间。

此外,我可以在没有 LINQ 的情况下轻松编写类似的东西。但我希望的是使用 LINQ 或其他一些巧妙技巧的优雅解决方案。

最佳答案

这使用 LINQ 非常简单。这里是按分组的例子:

var grouped = dates.OrderBy(x => x.Ticks).GroupBy(x => x.Month)
                   .Select(x => new {Month = x.Key, Max = x.Max()});

这给出了你的例子:

{ Month = 1, Max = 1/31/2018 12:00:00 AM }

{ Month = 2, Max = 2/27/2018 12:00:00 AM }


要为 week 执行此操作,请将此 lambda 用于 GroupBy:

x => CultureInfo.InvariantCulture.Calendar.GetWeekOfYear(
         x, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday
     )

输出:

{ Week = 1, Max = 1/4/2018 12:00:00 AM }

{ Week = 2, Max = 1/12/2018 12:00:00 AM }

{ Week = 4, Max = 1/24/2018 12:00:00 AM }

{ Week = 5, Max = 2/1/2018 12:00:00 AM }

{ Week = 9, Max = 2/27/2018 12:00:00 AM }


季度:

x => (x.Month + 2)/3

输出:

{ Quarter = 1, Max = 2/27/2018 12:00:00 AM }


:

x => x.Year

输出

{ Year = 2018, Max = 2/27/2018 12:00:00 AM }

关于c# - 如何从按周、月、季度或年分组的随机日期列表中提取最大日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50191548/

相关文章:

c# - 如何在 Crystal 报表中管理页面大小和页边距?

c# - 使用 linq 查找 List<List<string>> 的多个值中的任何一个

c# - 如何通过保留空格对包含空格的字符串中的字符进行排序

c# - Linq 查询等效于存在多个条件

c++ - gcc 6.3 和 clang 4.0 中的 std::get_time() 不适用于完整的月份名称

c# - 如何划分 3 个 div(CSS + MVC)

c# - 如何从 Windows 8.1 商店应用程序运行 .exe 文件?

C# 7.0 丢弃参数歧义

r - 如何在r中分隔年、月、日中的日期

javascript - 如何从明天的nodejs获取unix时间戳