Я предполагаю, что вы хотите найти дату окончания для чего-то с датой начала и количеством рабочих дней, которые она займет?
Если это так, то следующий код может быть тем, что вы хотите. Предполагается, что у вас есть список всех праздников для максимального диапазона времени, которое вы поддерживаете. Это может быть несколько лет в будущем, в зависимости от ваших требований!
Этот код принимает дату начала и количество рабочих дней (и список праздников) и возвращает дату окончания.
public static DateTime AddWorkingDays(DateTime start, int workingDays, IEnumerable<DateTime> holidays)
{
var dict = new HashSet<DateTime>(holidays);
DateTime date;
for (date = start; workingDays > 0; date = date.AddDays(1))
{
if (!dict.Contains(date))
{
--workingDays;
}
}
return date;
}
Альтернативная реализация предполагает, что у вас есть предикат, вы можете позвонить, чтобы определить, является ли день это праздник:
public static DateTime AddWorkingDays(DateTime start, int workingDays, Predicate<DateTime> isHoliday)
{
DateTime date;
for (date = start; workingDays > 0; date = date.AddDays(1))
{
if (!isHoliday(date))
{
--workingDays;
}
}
return date;
}
Оба этих реализаций страдают от посещения каждой даты. Возможно, это не проблема, но если диапазон дат большой, он может быть слишком медленным.
Это кажется скорее специфичным для локали ... В разных странах (и даже в разных городах в некоторых случаях) проводятся различные праздничные дни. По этой причине я думаю, что маловероятно, что для него есть библиотека общего назначения. Вам нужно будет предоставить список праздников в любую библиотеку общего назначения, и если у вас есть этот список, то то, что вы хотите сделать, тривиально в любом случае. –
Я работал по субботам. –
Как был полезен последний комментарий? В любом случае @Ziba Leah: Для этого вы напишите свой собственный алгоритм. Мы делаем много манипуляций с датами, и я не знаю встроенного метода, который делал то, что вы делали после того, как ohters предположили, что он специфичен для локали. – Risho