Attentiondays
public class Specialday { public Specialday(string name, DateTime date, bool legalOmission = false) { Name = name; Date = date; LegalOmission = legalOmission; } public string Name { get; set; } public DateTime Date { get; set; } public bool LegalOmission { get; set; } } public class SpecialdayCalculator { public static IEnumerable<int> EachYear(int fromYear, int toYear) { while (fromYear <= toYear) { yield return fromYear++; } } public IEnumerable<Specialday> GetSpecialdays(int fromYear, int toYear) { foreach (var year in EachYear(fromYear, toYear)) { foreach (var day in GetSpecialdays(year)) { yield return day; } } } public IEnumerable<Specialday> GetSpecialdays(int year) { var specialdays = new List<Specialday> { new Specialday("Nieuwjaarsdag", new DateTime(year, 1, 1), true), new Specialday("Bevrijdingsdag", new DateTime(year, 5, 5)), new Specialday("1e Kerstdag", new DateTime(year, 12, 25), true), new Specialday("2e Kerstdag", new DateTime(year, 12, 26), true) }; var kingsDate = new DateTime(year, 4, 27); if (kingsDate.DayOfWeek == DayOfWeek.Sunday) kingsDate = kingsDate.AddDays(-1); specialdays.Add(new Specialday("Koningsdag", kingsDate, true)); var easterDate = GetEasterSunday(year); specialdays.Add(new Specialday("Goede Vrijdag", easterDate.AddDays(-2))); specialdays.Add(new Specialday("1e Paasdag", easterDate, true)); specialdays.Add(new Specialday("2e Paasdag", easterDate.AddDays(1), true)); specialdays.Add(new Specialday("Hemelvaartsdag", easterDate.AddDays(39), true)); specialdays.Add(new Specialday("1e Pinksterdag", easterDate.AddDays(49), true)); // 10 dagen na hemelvaart specialdays.Add(new Specialday("2e Pinksterdag", easterDate.AddDays(50), true)); specialdays.Add(new Specialday("Oudjaarsdag", new DateTime(year + 1, 1, 1).AddDays(-1))); return specialdays.OrderBy(d => d.Date); } /// <summary> /// Hier snapt niemand wat van, maar we gaan er vanuit dat het werkt /// </summary> /// <param name="year"></param> public static DateTime GetEasterSunday(int year) { int g = year % 19; int c = year / 100; int h = (c - c / 4 - (8 * c + 13) / 25 + 19 * g + 15) % 30; int i = h - h / 28 * (1 - h / 28 * (29 / (h + 1)) * ((21 - g) / 11)); int day = i - ((year + year / 4 + i + 2 - c + c / 4) % 7) + 28; int month = 3; if (day > 31) { month++; day -= 31; } return new DateTime(year, month, day); } }
253700cookie-checkSpecialday calculator