BudgetAnalyser.Engine.NewZealandPublicHolidays.EasterHoliday.CalculateDate C# (CSharp) Метод

CalculateDate() публичный Метод

public CalculateDate ( System.DateTime start, System.DateTime end ) : System.DateTime
start System.DateTime
end System.DateTime
Результат System.DateTime
            public override DateTime CalculateDate(DateTime start, DateTime end)
            {
                for (var year = start.Year; year <= end.Year; year++)
                {
                    // first calculate Easter Sunday

                    var goldenNumber = year % 19;
                    var century = year / 100;
                    var h = (century - century / 4 - (8 * century + 13) / 25 + 19 * goldenNumber + 15) % 30;
                    var i = h - h / 28 * (1 - h / 28 * (29 / (h + 1)) * ((21 - goldenNumber) / 11));

                    var day = i - (year + year / 4 + i + 2 - century + century / 4) % 7 + 28;
                    var month = 3;

                    if (day > 31)
                    {
                        month++;
                        day -= 31;
                    }

                    var proposed = new DateTime(year, month, day);

                    switch (Day)
                    {
                        case DayOfWeek.Friday:
                            proposed = proposed.AddDays(-2);
                            break;
                        case DayOfWeek.Sunday:
                            break;
                        case DayOfWeek.Monday:
                            proposed = proposed.AddDays(1);
                            break;
                        case DayOfWeek.Tuesday:
                            proposed = proposed.AddDays(2);
                            break;
                        default:
                            throw new NotSupportedException("Only Easter Friday, Monday, and Tuesday are supported.");
                    }

                    if (proposed >= start && proposed <= end)
                    {
                        return proposed;
                    }
                }

                throw new InvalidOperationException(string.Format(CultureInfo.InvariantCulture,
                    "Cannot find a suitable date between {0} and {1}", start, end));
            }
        }
NewZealandPublicHolidays.EasterHoliday