C# 按天数筛选日期列表
我正在尝试按天数筛选日历(日期列表),但在特定场景中遇到了困难 日历最初将包含指定范围内的所有日期,例如2013年1月31日至2015年1月31日。我希望筛选此列表以仅包含与日历中的第一天编号匹配的日期,因此,例如,如果日历中的第一天是25,则返回的新筛选日历将是:C# 按天数筛选日期列表,c#,linq,datetime,calendar,C#,Linq,Datetime,Calendar,我正在尝试按天数筛选日历(日期列表),但在特定场景中遇到了困难 日历最初将包含指定范围内的所有日期,例如2013年1月31日至2015年1月31日。我希望筛选此列表以仅包含与日历中的第一天编号匹配的日期,因此,例如,如果日历中的第一天是25,则返回的新筛选日历将是: 2013年2月25日 2013年3月25日 2013年4月25日 。。。等 第一个例子对于LINQ来说非常简单 var calendar = ...code to get calendar from DB. //Get Day
- 2013年2月25日
- 2013年3月25日
- 2013年4月25日
var calendar = ...code to get calendar from DB.
//Get Day Number of First Entry in Calendar (31st for example)
int day = calendar.Dates.Select(d => d.Date.Day).First();
//Filter the rest of the calendar by this date.
return new Calendar
{
Dates = calendar.Dates.Where(c => c.Date.Day == day).ToList()
};
我在路过时遇到了困难,比如说,31岁。我的要求是将其返回:
- 2013年1月31日
- 2013年2月28日
- 2013年4月30日
- 2013年5月31日
亚历克斯
DateTime.DaysInMonth
救命
return new Calendar
{
Dates = calendar.Dates.Where(c => c.Date.Day == Math.Min(day, DateTime.DaysInMonth(c.Year, c.Month))).ToList()
};
您能提供将要使用的年份吗?因此,您不希望日期为
31
而是任何月份的最后一天?也许这个方法会有帮助:bool islastfmonth(DateTime date){return date==new DateTime(date.Year,date.Month,1)。AddMonths(1)。AddDays(-1);}
(未经测试)预筛选的日历最有可能包含跨越3-5年的日期范围,比如说2012-2015年,所有日期都在这之间。这回答了你的问题吗?不完全是,但我忘了DateTime.Year。接听来电@Corak-是的,谢谢,也许这和原始代码的组合可以工作。我来看看我能不能把东西弄碎。他有一天的时间,然后他要么用这个数字,要么在这个月的最后一天太大。就快到了,但还不完全到-1.
return new Calendar
{
Dates = calendar.Dates.Where(c => c.Date.Day == Math.Min(day, DateTime.DaysInMonth(c.Year, c.Month))).ToList()
};