using System.Collections.Generic;
public static void Main()
var closedOn = new DayOfWeek[] { DayOfWeek.Saturday, DayOfWeek.Sunday };
var start = new DateTime(2018, 07, 23);
var end = new DateTime(2018, 08, 06);
var days1 = GetBusinessDaysInRange(start, end, closedOn);
foreach(var day in days1) {
Console.WriteLine(day.ToLongDateString());
Console.WriteLine("___________________");
var days2 = GetFixedNumberOfBusinessDays(start, 10, closedOn);
foreach(var day in days2) {
Console.WriteLine(day.ToLongDateString());
public static IEnumerable<DateTime> GetBusinessDaysInRange(DateTime startDate, DateTime endDate, DayOfWeek[] closedOn) {
if (endDate < startDate) {
throw new ArgumentException("endDate must be before startDate");
var businessDays = new List<DateTime>();
if (!closedOn.Contains(date.DayOfWeek)) {
public static IEnumerable<DateTime> GetFixedNumberOfBusinessDays(DateTime startDate, int numberOfBusinessDays, DayOfWeek[] closedOn) {
if (numberOfBusinessDays < 0) {
throw new ArgumentException("numberOfBusinessDays must be zero or positive.");
var businessDays = new List<DateTime>();
while (businessDays.Count() < numberOfBusinessDays) {
if (!closedOn.Contains(date.DayOfWeek)) {