C#에서 두 날짜 사이의 영업일 수를 효율적으로 계산하는 방법
두 날짜 사이의 영업일 수를 계산할 때는 주말과 공휴일을 고려합니다. C#에서는 이 작업을 수행하는 여러 가지 방법을 제공합니다.
제안되는 솔루션은 DateTime
클래스를 활용하여 비효율적인 일일 열거를 방지하는 것입니다. 이 방법은 전체 주, 부분 주말 및 공휴일을 고려하여 지정된 간격의 근무일 수를 계산합니다. 알고리즘은 다음과 같습니다.
.Date
속성을 사용하여 입력 날짜를 해당 DateTime
객체로 변환합니다. TimeSpan
을 사용하여 날짜 사이의 범위를 계산하고 매일 요일 수를 1씩 증가시킵니다. 솔루션 구현은 다음과 같습니다.
<code class="language-csharp">public static int BusinessDaysUntil(this DateTime firstDay, DateTime lastDay, params DateTime[] bankHolidays) { firstDay = firstDay.Date; lastDay = lastDay.Date; if (firstDay > lastDay) throw new ArgumentException("Incorrect last day " + lastDay); TimeSpan span = lastDay - firstDay; int businessDays = span.Days + 1; int fullWeekCount = businessDays / 7; // 计算周末天数 int weekendDays = fullWeekCount * 2; int remainingDays = businessDays % 7; int firstDayOfWeek = (int)firstDay.DayOfWeek; int lastDayOfWeek = (int)lastDay.DayOfWeek; if (remainingDays > 0) { if (lastDayOfWeek == 0) lastDayOfWeek = 7; // 将周日转换为7 if (firstDayOfWeek == 0) firstDayOfWeek = 7; // 将周日转换为7 if (lastDayOfWeek < 6) weekendDays += 0; // 如果最后一天不是周末,则不加周末天数 else if (lastDayOfWeek == 6) weekendDays += 1; // 如果最后一天是周六,则加一天 else weekendDays += 2; // 如果最后一天是周日,则加两天 if (firstDayOfWeek == 7) weekendDays -= 1; // 如果第一天是周日,则减一天 else if (firstDayOfWeek == 6) weekendDays -= 1; // 如果第一天是周六,则减一天 } businessDays -= weekendDays; foreach (DateTime bankHoliday in bankHolidays) { DateTime bh = bankHoliday.Date; if (bh >= firstDay && bh <= lastDay) businessDays--; } return businessDays; }</code>
위 내용은 C#에서 두 날짜 사이의 영업일 수를 효율적으로 계산하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!