Comment calculer efficacement le nombre de jours ouvrés entre deux dates en C#
Le calcul du nombre de jours ouvrés entre deux dates prend en compte les week-ends et les éventuels jours fériés. C# propose plusieurs façons d’accomplir cette tâche.
Une solution suggérée utilise la classe DateTime
pour éviter une énumération quotidienne inefficace. Cette méthode calcule le nombre de jours ouvrables dans un intervalle spécifié en prenant en compte les semaines complètes, les week-ends partiels et les jours fériés. L'algorithme est le suivant :
.Date
pour convertir la date d'entrée en l'objet DateTime
correspondant. TimeSpan
pour calculer l'intervalle entre les dates et incrémenter le nombre de jours de la semaine de 1 pour chaque jour. Voici la mise en œuvre de la solution :
<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>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!