簡體   English   中英

使用Linq獲取日期范圍內不存在的日期

[英]Get days that are not present in a date range using Linq

我有一個日期列表,可以像

06/01/2012
06/02/2012
06/03/2012
06/06/2012
06/07/2012
06/08/2012
06/10/2012
06/13/2012
06/14/2012
06/15/2012

我有這個日期范圍

 06/01/2012-06/15/2012

我如何使用linq獲取不在列表中但落在日期范圍內的日期。

您可以執行以下操作:

var dateList = new List<DateTime>
{
    new DateTime(2012, 06, 01),
    new DateTime(2012, 06, 02),
    //..etc
};

var startDate = new DateTime(2012, 06, 01);
var endDate = new DateTime(2012, 06, 15);

var dateRange =
    Enumerable.Range(0, (int)(endDate - startDate).TotalDays + 1)
    .Select(i => startDate.AddDays(i));

var datesNotMatched = dateRange.Except(dateList);

inputDateList為代表輸入日期的字符串列表,而AttendanceDate為DateTime的列表對應於輸入字符串。 讓我用dateRangeStart表示開始范圍,而dateRangeEnd表示范圍End。 然后,以下代碼將過濾dateDangeStart-dateRangeEnd范圍內的inputDateList。

DateTime inDate;
DateTime dateRangeStart;
DateTime dateRangeEnd;
List<string> inputDateList = new List<string>(){"06/01/2012",
                                          "06/02/2012",
                                          "06/03/2012",
                                          "06/06/2012",
                                          "06/07/2012",
                                          "06/08/2012",
                                          "06/10/2012",
                                          "06/13/2012",
                                          "06/14/2012",
                                          "06/17/2012"};

List<DateTime?> AttendanceDate = inputDateList.Select(x => DateTime.TryParseExact(x, "MM/dd/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out inDate) ? inDate : (DateTime?)null)
                                              .ToList();

DateTime.TryParseExact("06/01/2012", "MM/dd/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out dateRangeStart);
DateTime.TryParseExact("06/15/2012", "MM/dd/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out dateRangeEnd);

List<DateTime?> datesInRange = AttendanceDate.Where(x => x >= dateRangeStart && x <= dateRangeEnd).ToList();

datesInRange將是必需的日期列表

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM