【发布时间】:2017-11-22 08:03:42
【问题描述】:
我有一个开始日期和一个结束日期以及一个具体日期(节假日)的列表。 从开始日期到结束日期,首先我确定是否有周末,如果有,我需要确定周末有多少天并将天数添加到结束日期,然后确定这些日期是否属于在假期列表中的日期列表中。同样,如果某个日期在假期列表中,我必须取该天数,将其添加到末尾并再次运行循环。
例如。初始日期范围为 2017 年 11 月 20 日至 2017 年 11 月 24 日。周末的第一次检查将返回 0,然后我检查假期,这将返回 2(23 日和 24 日),然后我需要调整日期,所以我的新范围是从 11/20 到 11/26,到我必须再次循环周末,会发现周末有 2 天。等等。下面的代码我作弊了,因为我知道背靠背的假期永远不会超过2个,但是它的代码非常繁琐。
另外,请考虑是否先放周末,然后在调整最初的周末后放假。
我从来没有遇到过周末的问题,只是在假期我被赋予了错误的价值。下面的代码工作正常,我只是想看看如何改进它的建议。我尝试过 for 循环、while 循环,这是唯一可行的方案。感谢您的帮助。
public static int weekends(DateTime start, DateTime end, List<DateTime> holidays, Boolean leftSpace)
{
int days = 0;
DateTime tempstart = start;
TimeSpan startEnd = end - start;
int currentDays = startEnd.Days;
for (DateTime date = start; date <= end; date = date.AddDays(1))
{
int dw = (int)date.DayOfWeek;
if (dw == 0 || dw == 6)
{
days++;
}
}
if (!leftSpace)
{
end = end.AddDays(days);
if (end.DayOfWeek == 0)
{
end = end.AddDays(1);
days++;
}
else if ((int)end.DayOfWeek == 6)
{
end = end.AddDays(2);
days = days + 2;
}
Boolean holidayExist = false;
int holidayCount = 0;
foreach (DateTime holiday in holidays.Where(r => r.Date >= start.Date && r.Date <= end.Date))
{
days++;
holidayCount++;
holidayExist = true;
}
if (holidayExist)
{
DateTime tempend = end;
end = end.AddDays(holidayCount);
int newWeekend = 0;
for (DateTime date = tempend; date <= end; date = date.AddDays(1))
{
int dw = (int)date.DayOfWeek;
if (dw == 0 || dw == 6)
{
days++;
newWeekend++;
}
}
holidayExist = false;
holidayCount = 0;
DateTime holidayEnd = end.AddDays(newWeekend);
foreach (DateTime holiday in holidays.Where(r => r.Date >= end.Date && r.Date <= holidayEnd.Date))
{
days++;
holidayCount++;
holidayExist = true;
}
if (holidayExist)
{
tempend = end;
end = end.AddDays(holidayCount);
for (DateTime date = tempend; date <= end; date = date.AddDays(1))
{
int dw = (int)date.DayOfWeek;
if (dw == 0 || dw == 6)
{
days++;
}
}
}
}
}
return days;
}
【问题讨论】:
-
建议您将其用于代码审查
-
@BugFinder 由于此代码无法按预期工作,我建议不要这样做。请看their help center。
-
@mast - 但他说效果很好!
-
@BugFinder - 他实际上是在说这两个 :) -
I never have an issue with just weekends...和The code below works fine... -
@BugFinder “只有在节假日我才得到 错误 值。” (强调我的)