using System.Collections.Generic;
public static void Main()
PrintHolidays(DateTime.Now.Year + 1);
public static void PrintHolidays(int year)
Console.WriteLine("CDI's holidays for " + year);
foreach (var hol in GetPubHolidays(year))
Console.WriteLine(hol.Stamp.ToString("dd.MM")+" "+hol.Stamp.DayOfWeek.ToString().Substring(0,3) + " "+hol.Description);
public static List<PubHoliday> GetPubHolidays(int year)
DateTime easterSun = EasterSunday(year);
var ret = new List<PubHoliday>
new PubHoliday(new DateTime(year, 1, 1), "Nouvel An"),
new PubHoliday(easterSun.AddDays(-2), "Vendredi Saint"),
new PubHoliday(easterSun.AddDays(1), "Pâques"),
new PubHoliday(easterSun.AddDays(39), "Ascension"),
new PubHoliday(easterSun.AddDays(50), "Pentecôte"),
new PubHoliday(easterSun.AddDays(60), "Fête-Dieu"),
new PubHoliday(new DateTime(year, 8, 1), "Fête Nationale"),
new PubHoliday(new DateTime(year, 8, 15), "Assomption"),
new PubHoliday(new DateTime(year, 11, 1), "Toussaint"),
new PubHoliday(new DateTime(year, 12, 8), "Immaculée Conception"),
new PubHoliday(new DateTime(year, 12, 25), "Noël"),
new PubHoliday(new DateTime(year, 12, 26), "St Etienne")
if (year >= 2015 && DayOfWeek.Saturday == new DateTime(year, 12, 25).DayOfWeek)
ret.Add(new PubHoliday(new DateTime(year, 12, 31), "Congé 24 & 31 après-midi"));
else if (year > 2015 && DayOfWeek.Sunday == new DateTime(year - 1, 12, 25).DayOfWeek)
ret.Add(new PubHoliday(new DateTime(year, 1, 2), "Récupération 25 & 1e sur weekend"));
public static DateTime EasterSunday(int year)
int h = (c - (int)(c / 4) - (int)((8 * c + 13) / 25) + 19 * g + 15) % 30;
int i = h - (int)(h / 28) * (1 - (int)(h / 28) * (int)(29 / (h + 1)) * (int)((21 - g) / 11));
day = i - ((year + (int)(year / 4) + i + 2 - c + (int)(c / 4)) % 7) + 28;
return new DateTime(year, month, day);
public DateTime Stamp { get; set; }
public string Description { get; set; }
public PubHoliday(DateTime stamp, string desc)