Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /// <summary>
- /// Services de manipulation des dates : Calcul d'intervalles en jour ouvrés, détection des jours chomés...
- /// </summary>
- public static class DateUtils
- {
- /// <summary>
- /// Calcule le nombre de jours ouvrés entre 2 dates en excluant les week-end et les jours fériés.
- /// </summary>
- /// <param name="dateDebut"></param>
- /// <param name="dateFin"></param>
- /// <returns></returns>
- public static int GetNbJoursOuvres(DateTime dateDebut, DateTime dateFin)
- {
- int nbJoursOuvres = 0;
- for (DateTime currentDate = dateDebut; currentDate < dateFin; currentDate = currentDate.AddDays(1))
- {
- if (!IsWeekend(currentDate) && !IsJourFerie(currentDate))
- {
- nbJoursOuvres++;
- }
- }
- return nbJoursOuvres;
- }
- /// <summary>
- /// Calcule le nombre de jours ouvrés entre 2 dates en excluant uniquement les week-end.
- /// </summary>
- /// <param name="dateDebut"></param>
- /// <param name="dateFin"></param>
- /// <returns></returns>
- public static int GetNbJoursOuvresSemaine(DateTime dateDebut, DateTime dateFin)
- {
- int nbJoursOuvres = 0;
- for (DateTime currentDate = dateDebut; currentDate < dateFin; currentDate = currentDate.AddDays(1))
- {
- if (!IsWeekend(currentDate))
- {
- nbJoursOuvres++;
- }
- }
- return nbJoursOuvres;
- }
- public static bool IsWeekend(DateTime dateToCheck)
- {
- return dateToCheck.DayOfWeek == DayOfWeek.Saturday || dateToCheck.DayOfWeek == DayOfWeek.Sunday;
- }
- public static bool IsJourFerie(DateTime dateToCheck)
- {
- return ListeJoursFeries(dateToCheck.Year).Contains(dateToCheck.Date);
- }
- public static List<DateTime> ListeJoursFeries(int year)
- {
- List<DateTime> joursFeries = new List<DateTime>();
- joursFeries.Add(new DateTime(year, 1, 1)); // Nouvel An
- DateTime lundiPaques = GetLundiPaques(year);
- joursFeries.Add(GetLundiPaques(year)); // Paques
- joursFeries.Add(lundiPaques.AddDays(38)); // Jeudi Ascension
- joursFeries.Add(lundiPaques.AddDays(49)); // Pentecote
- joursFeries.Add(new DateTime(year, 5, 1)); // 1 mai
- joursFeries.Add(new DateTime(year, 5, 8)); // 8 mai
- joursFeries.Add(new DateTime(year, 7, 14)); // 14 juillet
- joursFeries.Add(new DateTime(year, 8, 15)); // 15 aout
- joursFeries.Add(new DateTime(year, 11, 1)); // 1 novembre
- joursFeries.Add(new DateTime(year, 11, 11)); // 11 novembre
- joursFeries.Add(new DateTime(year, 12, 25)); // 25 décembre
- return joursFeries;
- }
- /// <summary>
- /// Calcule la date du lundi de Pâques pour une année donnée.
- /// </summary>
- /// <param name="year">Année à prendre en compte.</param>
- /// <returns></returns>
- public static DateTime GetLundiPaques(int year)
- {
- int modulo = year % 19;
- int siecle = year / 100;
- int quartile = siecle / 4;
- int part1 = (19 * modulo + siecle - quartile - ((8 * siecle + 13) / 25) + 15) % 30;
- int part2 = part1 / 28;
- int part3 = (part2 * (29 / (part1 + 1)) * ((21 - modulo) / 11) - 1) * part2 + part1;
- int daysUntilMarch = 28 + part3 - ((((year / 4 + year) + part3 + 2 + quartile) - siecle) % 7);
- DateTime lundiPaques = new DateTime(year, 3, 1).AddDays(daysUntilMarch);
- return lundiPaques;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement