using System; using System.Collections.Generic; using System.Linq; namespace LCU.Api.Internal.DispatcherSharedLib.Utilities; public static class HolidayHelpers { public static DateTime? HandleHolidays(DateTime? nextRunTime) { if (nextRunTime != null) { List holidays = GetHolidays(nextRunTime.Value.Year); var today = Convert.ToDateTime(nextRunTime).Date; var isHoliday = holidays.Where(x => today == x).Any(); if (isHoliday) { nextRunTime = nextRunTime.Value.AddDays(1); } } return nextRunTime; } private static List GetHolidays(int year) { List holidays = new List { GetNewYearsDay(year), GetMemorialDay(year), GetIndependenceDay(year), GetLaborDay(year), GetThanksgivingDay(year), GetChristmasDay(year) }; return holidays; } /// New Years Day - Jan 1st public static DateTime GetNewYearsDay(int year) { return new DateTime(year, 1, 1).Date; } /// Memorial Day - last Monday in May public static DateTime GetMemorialDay(int year) { DateTime memorialDay = new DateTime(year, 5, 31); var dayOfWeek = memorialDay.DayOfWeek; while (dayOfWeek != DayOfWeek.Monday) { memorialDay = memorialDay.AddDays(-1); dayOfWeek = memorialDay.DayOfWeek; } return memorialDay.Date; } /// Independence Day - July 4th public static DateTime GetIndependenceDay(int year) { return new DateTime(year, 7, 4).Date; } /// Labor Day -- 1st Monday in September public static DateTime GetLaborDay(int year) { DateTime laborDay = new DateTime(year, 9, 1); var dayOfWeek = laborDay.DayOfWeek; while (dayOfWeek != DayOfWeek.Monday) { laborDay = laborDay.AddDays(1); dayOfWeek = laborDay.DayOfWeek; } return laborDay.Date; } /// Thanksgiving Day - 4th Thursday in November public static DateTime GetThanksgivingDay(int year) { var thanksgiving = (from day in Enumerable.Range(1, 30) where new DateTime(year, 11, day).DayOfWeek == DayOfWeek.Thursday select day).ElementAt(3); return new DateTime(year, 11, thanksgiving).Date; } /// Christmas Day - Dec 25th public static DateTime GetChristmasDay(int year) { return new DateTime(year, 12, 25).Date; } }