【问题标题】:Get dates from the current calendar month and the next 11 coming months获取当前日历月和未来 11 个月的日期
【发布时间】:2012-03-29 13:14:23
【问题描述】:

我有一个IEnumerable<DateTime>。我想提取当前日历月中发生的所有日期,即使它们已经过去,以及接下来 11 个日历月中的所有日期。我将显示从最近开始按月份分组的日期。例如:

当前日期 - 2012 年 3 月 12 日

  • 2012 年 3 月
    • 3 月 3 日 - 活动 1
    • 3 月 15 日 - 活动 2
    • 3 月 30 日 - 活动 3
  • ...
  • ...
  • ...
  • 2013 年 2 月
    • 2 月 3 日 - 事件 156
    • 2 月 13 日 - 事件 157
    • 2 月 20 日 - 事件 158

我已经知道如何进行分组部分。您将如何使用 linq 和 C# 过滤日期?

【问题讨论】:

  • 您有问题吗?
  • 如果您显示您的 IEnumerable 包含的内容怎么办?
  • 您到底遇到了什么问题?是否包含事件的分组或条件?
  • 我只需要关于包含或排除日期的条件的帮助。我只提到了分组来说明我使用代码的目的。

标签: c# linq


【解决方案1】:

这样的事情应该可以工作。您首先确定日期的合法范围,然后过滤掉超出该范围的所有日期,最后按月份对它们进行分组。

以下代码是我手工写的,你可能需要调整一下:

var acceptableFirstDate = DateTime.Today;
if (DateTime.Today.Day > 1)
{
    acceptableFirstDate = DateTime.Today.AddDays(-DateTime.Today.Day + 1);
}
var acceptableLastDate = acceptableFirstDate.AddMonths(12).AddDays(-1);

var result = dates
    .Where(x => x >= acceptableFirstDate && x <= acceptableLastDate)
    .GroupBy(x => x.Month);

我希望这会有所帮助!

【讨论】:

  • 这工作得很好,除了一件事。我需要将第 6 行设为“var acceptLastDate = AcceptableFirstDate.AddMonths(12).AddDays(-1)”。在我的示例中,我希望 2013 年 2 月 28 日作为我的最后一天,而不是 2013 年 3 月 1 日。非常感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-22
  • 2018-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多