[英]Get dates given a start date an end date and day of week
給定開始日期(DateTime),結束日期(DateTime)和DayOfWeek列表。 如何獲得所有匹配的日期:
范例:
StartDate : "06/17/2016"
EndDate : "06/30/2016"
DayOfWeek(s) : [0(Monday), 1(Tuesday), 4(Friday)]
想要的結果是:
Dates = ["06/17/2016", "06/20/2016", "06/21/2016", "06/24/2016", "06/27/2016", "06/28/2016"]
這將返回您在startDate和EndDate之間的所有日期列表,這些日期屬於dayOfWeek的給定枚舉:
var allDays = Enumerable.Range(0, (endDate - startDate).Days + 1).Select(d => startDate.AddDays(d));
var Dates = allDays.Where(dt => dayOfWeek.Contains(dt.DayOfWeek)).ToList();
還有另一種可能的解決方案,我認為這很容易理解和調試,即使它比其他可能的解決方案花費更多的行和更少的資源:
var startDate = new DateTime(2016, 06, 17);
var endDate = new DateTime(2016, 06, 30);
DayOfWeek[] daysOfWeek = { DayOfWeek.Monday, DayOfWeek.Tuesday, DayOfWeek.Friday };
List<DateTime> dates = new List<DateTime>();
if (endDate >= startDate)
{
var tmp = startDate;
tmp = tmp.AddDays(1); //I notice you didn't add 06/17/2016 that is friday, if you want to add it, just remove this line
do
{
if (daysOfWeek.Contains(tmp.DayOfWeek))
dates.Add(tmp);
tmp = tmp.AddDays(1);
}
while (tmp <= endDate); //If you don't want to consider endDate just change this line into while (tmp < endDate);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.