Home > C#

DateTime Extensions : Easter Days

17. July 2009

Bonjour,

Dans la plupart de nos projets .NET nous avons besoin de gérer des dates et plus spécialement les jours fériés. Je vous propose ici quelques extensions de méthode afin de de définir simplement si une date est un jour férié ou non.

 

/// <summary>
/// Determine si une date donnée est un Weekend ou non
/// </summary>
/// <param name="date"></param>
/// <returns></returns>
public static Boolean IsWeekEnd(this DateTime date)
{
return date.DayOfWeek == DayOfWeek.Saturday || date.DayOfWeek == DayOfWeek.Sunday;
}

/// <summary>
/// Détermine si une date donnée est un jour férié ou non
/// </summary>
/// <param name="date"></param>
/// <returns></returns>
public static Boolean IsEasterDate(this DateTime date)
{
var holyDays = new List<DateTime>();
holyDays.Add(new DateTime(date.Year, 1, 1));
holyDays.Add(new DateTime(date.Year, 4, 13));
holyDays.Add(new DateTime(date.Year, 5, 1));
holyDays.Add(new DateTime(date.Year, 5, 8));
holyDays.Add(new DateTime(date.Year, 5, 21));
holyDays.Add(new DateTime(date.Year, 7, 14));
holyDays.Add(new DateTime(date.Year, 8, 15));
holyDays.Add(new DateTime(date.Year, 11, 1));
holyDays.Add(new DateTime(date.Year, 11, 11));
holyDays.Add(new DateTime(date.Year, 12, 25));
holyDays.Add(date.EasterDate());
holyDays.Add(date.EasterDate().AddDays(1));
holyDays.Add(date.EasterDate().AddDays(39));
holyDays.Add(date.EasterDate().AddDays(49));
holyDays.Add(date.EasterDate().AddDays(50));
return holyDays.Where(p => p.Month == date.Month && p.Day == date.Day).Count() > 0;
}

/// <summary>
/// Détermine si une date donnée est un jour férié ou non
/// </summary>
/// <param name="date"></param>
/// <returns></returns>
public static DateTime EasterDate(this DateTime date)
{
int Y = date.Year;
int a = Y % 19;
int b = Y / 100;
int c = Y % 100;
int d = b / 4;
int e = b % 4;
int f = (b + 8) / 25;
int g = (b - f + 1) / 3;
int h = (19 * a + b - d - g + 15) % 30;
int i = c / 4;
int k = c % 4;
int L = (32 + 2 * e + 2 * i - h - k) % 7;
int m = (a + 11 * h + 22 * L) / 451;
int month = (h + L - 7 * m + 114) / 31;
int day = ((h + L - 7 * m + 114) % 31) + 1;
DateTime dt = new DateTime(date.Year, month, day);
return dt;
}

 

A Bientôt :)


Shout it

C# ,

Comments

Dim
Dim
12/29/2009 1:08:43 AM #
Salut et merci pour ces méthodes :o)

Par contre, la méthode IsEasterDate ne fonctionne que pour l'année 2009.
Si tu regardes sur un calendrier 2010, le 13 avril (lundi de Pâques) et le 21 mai (Jeudi de l'Ascension) ne sont pas fériés.

Le lundi de Pâques 2010 tombe le 5 avril et le jeudi de l'Ascension le 13 mai.

Ces deux dates ne sont pas constantes mais se calculent.

A+
Dam