Esempio n. 1
0
        private DateTime GetVariableHoliday(HolidayConfiguration holidayConfiguration, int year)
        {
            var       occurrenceFormat = holidayConfiguration.Occurrence.Split('|');
            int       month            = int.Parse(occurrenceFormat[0]);
            DayOfWeek dayOfWeek        = DayOfWeek.Monday;
            int       occurrence       = int.Parse(occurrenceFormat[2]);

            return(Enumerable.Range(1, 7)
                   .Select(day => new DateTime(year, month, day))
                   .First(dateTime => (dateTime.DayOfWeek == dayOfWeek))
                   .AddDays(7 * (occurrence - 1)));
        }
Esempio n. 2
0
        private DateTime GetFixedHoliday(HolidayConfiguration holidayConfiguration, int year)
        {
            var holidayDate = DateTime.ParseExact($"{holidayConfiguration.DayMonth}/{year}", "d/M/yyyy", CultureInfo.InvariantCulture);

            if (holidayConfiguration.IsObserved)
            {
                if (holidayDate.DayOfWeek == DayOfWeek.Saturday)
                {
                    holidayDate = holidayDate.AddDays(2);
                }
                else if (holidayDate.DayOfWeek == DayOfWeek.Sunday)
                {
                    holidayDate = holidayDate.AddDays(1);
                }
            }

            return(holidayDate);
        }
Esempio n. 3
0
        private DateTime GetHoliday(HolidayConfiguration holidayConfiguration, int year)
        {
            if (!Utility.IsValidHolidayConfig(holidayConfiguration))
            {
                throw new InvalidOperationException("Invalid holiday configurations");
            }

            var holidayDate = new DateTime();

            if (!string.IsNullOrEmpty(holidayConfiguration.DayMonth))
            {
                holidayDate = GetFixedHoliday(holidayConfiguration, year);
            }
            else if (!string.IsNullOrEmpty(holidayConfiguration.Occurrence))
            {
                holidayDate = GetVariableHoliday(holidayConfiguration, year);
            }

            return(holidayDate);
        }
Esempio n. 4
0
        public static bool IsValidHolidayConfig(HolidayConfiguration holidayConfiguration)
        {
            if (holidayConfiguration == null)
            {
                return(false);
            }
            else if (!string.IsNullOrEmpty(holidayConfiguration.DayMonth))
            {
                return(DateTime.TryParseExact($"{holidayConfiguration.DayMonth}/2020", "d/M/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime _));
            }
            else if (string.IsNullOrEmpty(holidayConfiguration.Occurrence))
            {
                return(false);
            }
            else if (!string.IsNullOrEmpty(holidayConfiguration.Occurrence))
            {
                return(holidayConfiguration.Occurrence.Split('|').Length == 3);
            }

            return(true);
        }