一個人在不同的時間段內從事不同的作業,從星期一開始,到星期五結束,如下所示。周一至周五將被視為1周。任何重疊的周被視為1周。下面是場景
“分配的訂婚日期”:[{“開始日期”:“01/03/2022”,“結束日期”:“01/07/2022”},{“開始日期”:“2022 年 1 月 10 日”,“結束日期”:“01 /14/2022" }, { "開始日期":"01/10/2022", "結束日期":"01/21/2022" }, { "開始日期":"02/14/2022", "結束日期": “2022 年 2 月 18 日”}
]
在這里,我需要找到此人分配的周數,它應該是 4,因為從 1 月 10 日到 2 月 14 日的一周在 2 次參與中重疊。
我如何在 C# 中使用 linq 執行此操作。我試圖從串列中獲取最小開始日期和最大結束日期并找到差異并在幾周內進行轉換,但由于分配的日期不一致,它沒有給出實際結果。
uj5u.com熱心網友回復:
訣竅是將每個日期范圍轉換為列舉的周范圍,或者至少是對應于每周或部分周的不同日期(例如星期日)的串列。SelectMany() 可讓您將它們全部收集在一起,然后通過不同的計數為您提供答案。
嘗試類似:
int numberOfWeeks = AssignedEngagementdate
.SelectMany(a => {
DateTime firstSunday = a.Startdate.AddDays(-(int)a.Startdate.DayOfWeek);
DateTime lastSunday = a.Enddate.AddDays(-(int)a.Enddate.DayOfWeek); // May be same as firstSunday
int weeks = (lastSunday - firstSunday).Days / 7 1;
// Enumerate one Sunday per week
return Enumerable.Range(0, weeks).Select(i => firstSunday.AddDays(7 * i));
})
.Distinct()
.Count();
您可能仍需要考慮和測驗作業在周一和周五以外的日子開始或結束的案例。以上應處理大多數此類情況。
uj5u.com熱心網友回復:
沒有 linq,你可以試試這個 Datetime 擴展:
public static int NumberOfWeeksBetween(this DateTime start, DateTime end)
{
TimeSpan span = end.Subtract(start);
if (span.Days <= 7)
{
if (start.DayOfWeek > end.DayOfWeek) return 2;
else return 1;
}
int days = span.Days - 7 (int)start.DayOfWeek;
int weekCount = 1;
int dayCount = 0;
for (weekCount = 1; dayCount < days; weekCount ) dayCount = 7;
return weekCount;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/405923.html
標籤:
