Advertisement
PtiTom

DateUtils

Mar 9th, 2012 (edited)
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.24 KB | None | 0 0
  1.     /// <summary>
  2.     /// Services de manipulation des dates : Calcul d'intervalles en jour ouvrés, détection des jours chomés...
  3.     /// </summary>
  4.     public static class DateUtils
  5.     {
  6.         /// <summary>
  7.         /// Calcule le nombre de jours ouvrés entre 2 dates en excluant les week-end et les jours fériés.
  8.         /// </summary>
  9.         /// <param name="dateDebut"></param>
  10.         /// <param name="dateFin"></param>
  11.         /// <returns></returns>
  12.         public static int GetNbJoursOuvres(DateTime dateDebut, DateTime dateFin)
  13.         {
  14.             int nbJoursOuvres = 0;
  15.             for (DateTime currentDate = dateDebut; currentDate < dateFin; currentDate = currentDate.AddDays(1))
  16.             {
  17.                 if (!IsWeekend(currentDate) && !IsJourFerie(currentDate))
  18.                 {
  19.                     nbJoursOuvres++;
  20.                 }
  21.             }
  22.  
  23.             return nbJoursOuvres;
  24.         }
  25.  
  26.         /// <summary>
  27.         /// Calcule le nombre de jours ouvrés entre 2 dates en excluant uniquement les week-end.
  28.         /// </summary>
  29.         /// <param name="dateDebut"></param>
  30.         /// <param name="dateFin"></param>
  31.         /// <returns></returns>
  32.         public static int GetNbJoursOuvresSemaine(DateTime dateDebut, DateTime dateFin)
  33.         {
  34.             int nbJoursOuvres = 0;
  35.             for (DateTime currentDate = dateDebut; currentDate < dateFin; currentDate = currentDate.AddDays(1))
  36.             {
  37.                 if (!IsWeekend(currentDate))
  38.                 {
  39.                     nbJoursOuvres++;
  40.                 }
  41.             }
  42.  
  43.             return nbJoursOuvres;
  44.         }
  45.  
  46.         public static bool IsWeekend(DateTime dateToCheck)
  47.         {
  48.             return dateToCheck.DayOfWeek == DayOfWeek.Saturday || dateToCheck.DayOfWeek == DayOfWeek.Sunday;
  49.         }
  50.  
  51.         public static bool IsJourFerie(DateTime dateToCheck)
  52.         {
  53.             return ListeJoursFeries(dateToCheck.Year).Contains(dateToCheck.Date);
  54.         }
  55.  
  56.         public static List<DateTime> ListeJoursFeries(int year)
  57.         {
  58.             List<DateTime> joursFeries = new List<DateTime>();
  59.             joursFeries.Add(new DateTime(year, 1, 1));    // Nouvel An
  60.             DateTime lundiPaques = GetLundiPaques(year);
  61.             joursFeries.Add(GetLundiPaques(year));        // Paques
  62.             joursFeries.Add(lundiPaques.AddDays(38));    // Jeudi Ascension
  63.             joursFeries.Add(lundiPaques.AddDays(49));    // Pentecote
  64.             joursFeries.Add(new DateTime(year, 5, 1));    // 1 mai
  65.             joursFeries.Add(new DateTime(year, 5, 8));    // 8 mai
  66.             joursFeries.Add(new DateTime(year, 7, 14));    // 14 juillet
  67.             joursFeries.Add(new DateTime(year, 8, 15));    // 15 aout
  68.             joursFeries.Add(new DateTime(year, 11, 1));    // 1 novembre
  69.             joursFeries.Add(new DateTime(year, 11, 11));    // 11 novembre
  70.             joursFeries.Add(new DateTime(year, 12, 25));    // 25 décembre
  71.  
  72.             return joursFeries;
  73.         }
  74.  
  75.         /// <summary>
  76.         /// Calcule la date du lundi de Pâques pour une année donnée.
  77.         /// </summary>
  78.         /// <param name="year">Année à prendre en compte.</param>
  79.         /// <returns></returns>
  80.         public static DateTime GetLundiPaques(int year)
  81.         {
  82.             int modulo = year % 19;
  83.             int siecle = year / 100;
  84.             int quartile = siecle / 4;
  85.             int part1 = (19 * modulo + siecle - quartile - ((8 * siecle + 13) / 25) + 15) % 30;
  86.             int part2 = part1 / 28;
  87.             int part3 = (part2 * (29 / (part1 + 1)) * ((21 - modulo) / 11) - 1) * part2 + part1;
  88.             int daysUntilMarch = 28 + part3 - ((((year / 4 + year) + part3 + 2 + quartile) - siecle) % 7);
  89.  
  90.             DateTime lundiPaques = new DateTime(year, 3, 1).AddDays(daysUntilMarch);
  91.             return lundiPaques;
  92.         }
  93.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement