I have tried to tackle this question as follows: > The program Calculates the next Working day, taking into account: > - weekends (Saturdays and Sundays) > - holidays happening in the middle of the week > > param name="OrderDate" the date on which the order is placed > param name="workingDays" the number of workingdays to process the order > returns the date on which the Order is Requested to Ship public static DateTime getNextWorkingDay(DateTime OrderDate, int workingDays) { DateTime Holiday = new DateTime(); List<DateTime> SelectedHolidays = new List<DateTime>(); List<HolidayList> HolidayList = new List<HolidayList>(); int calculatedWorkingDays=0; if (workingDays <= 5) calculatedWorkingDays = workingDays; else if (workingDays % 6 == 0) { calculatedWorkingDays = workingDays + workingDays / 6 * 2; } else { calculatedWorkingDays = workingDays + workingDays / 7 * 2; } HolidayList = "Read the list from Json file"; foreach (var holiday in HolidayList) { string year = DateTime.Today.Year.ToString(); Holiday = DateTime.Parse(holiday.MonthAndDayValue + "-" + year); if (Holiday.Day == 1 && Holiday.Month == 1) { year = (DateTime.Today.Year + 1).ToString(); Holiday = DateTime.Parse(holiday.MonthAndDayValue + "-" + year); } SelectedHolidays.Add(Holiday.Date); if (Holiday.DayOfWeek == DayOfWeek.Sunday || Holiday.DayOfWeek == DayOfWeek.Saturday) { //do nothing } else { if (Holiday.Date == OrderDate.Date) OrderDate.AddDays(1); if (Holiday.Date > OrderDate.Date) { int K = (int)(Holiday.Date - OrderDate.Date).TotalDays; if (K <= calculatedWorkingDays) { calculatedWorkingDays++; } } } } if (OrderDate.DayOfWeek == DayOfWeek.Sunday) { calculatedWorkingDays++; } else if (OrderDate.DayOfWeek == DayOfWeek.Saturday || OrderDate.DayOfWeek == DayOfWeek.Friday) { calculatedWorkingDays += 2; } // this is required date DateTime date_OrderRequestedToShip = OrderDate.AddDays(calculatedWorkingDays); //check if the last date fall on a non working day(holiday or weekend) calculatedWorkingDays = 0; foreach (DateTime d in SelectedHolidays) if (d.Date == date_OrderRequestedToShip.Date) calculatedWorkingDays++; date_OrderRequestedToShip = date_OrderRequestedToShip.AddDays(calculatedWorkingDays); if (date_OrderRequestedToShip.DayOfWeek == DayOfWeek.Sunday) { calculatedWorkingDays = 1; } else if (date_OrderRequestedToShip.DayOfWeek == DayOfWeek.Saturday) { calculatedWorkingDays = 2; } return date_OrderRequestedToShip.AddDays(calculatedWorkingDays); } The holiday list contains the month and day (MM/dd) part only with out the year part: { "holidayName": "Memorial Day", "MonthAndDayValue": "05-30" } Can anyone help to tune up or suggest changes to make the code more efficient?