1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
|
public class CalendarUtils {
public static boolean isWorkingDay(Calendar day) {
// samedi ou dimanche
if(day.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY
|| day.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY)
return false;
// 01 Janvier
if(day.get(Calendar.DAY_OF_MONTH) == 1
&& day.get(Calendar.MONTH) == Calendar.JANUARY)
return false;
// 01 Mai
if(day.get(Calendar.DAY_OF_MONTH) == 1
&& day.get(Calendar.MONTH) == Calendar.MAY)
return false;
// 08 Mai
if(day.get(Calendar.DAY_OF_MONTH) == 8
&& day.get(Calendar.MONTH) == Calendar.MAY)
return false;
// 14 Juillet
if(day.get(Calendar.DAY_OF_MONTH) == 14
&& day.get(Calendar.MONTH) == Calendar.JULY)
return false;
// 15 Août
if(day.get(Calendar.DAY_OF_MONTH) == 15
&& day.get(Calendar.MONTH) == Calendar.AUGUST)
return false;
// 01 Novembre
if(day.get(Calendar.DAY_OF_MONTH) == 1
&& day.get(Calendar.MONTH) == Calendar.NOVEMBER)
return false;
// 11 Novembre
if(day.get(Calendar.DAY_OF_MONTH) == 11
&& day.get(Calendar.MONTH) == Calendar.NOVEMBER)
return false;
// Noël
if(day.get(Calendar.DAY_OF_MONTH) == 25
&& day.get(Calendar.MONTH) == Calendar.DECEMBER)
return false;
int year = day.get(Calendar.YEAR );
// Calcul du jour de pâques (algorithme de Oudin (1940))
//Calcul du nombre d'or - 1
int intGoldNumber = year%19;
// Année divisé par cent
int intAnneeDiv100 = year/100;
// intEpacte est = 23 - Epacte (modulo 30)
int intEpacte = (intAnneeDiv100 - intAnneeDiv100/4 - (8 * intAnneeDiv100 + 13)/25 +(19 * intGoldNumber)+ 15) % 30;
//Le nombre de jours à partir du 21 mars pour atteindre la pleine lune Pascale
int intDaysEquinoxeToMoonFull = intEpacte - (intEpacte/28)*(1 - (intEpacte/28)*(29/(intEpacte + 1))*((21 - intGoldNumber)/11));
//Jour de la semaine pour la pleine lune Pascale (0=dimanche)
int intWeekDayMoonFull = (year + year/4 + intDaysEquinoxeToMoonFull +2 - intAnneeDiv100 + intAnneeDiv100/4) % 7;
// Nombre de jours du 21 mars jusqu'au dimanche de ou
// avant la pleine lune Pascale (un nombre entre -6 et 28)
int intDaysEquinoxeBeforeFullMoon = intDaysEquinoxeToMoonFull - intWeekDayMoonFull;
// mois de pâques
int intMonthPaques =3 + (intDaysEquinoxeBeforeFullMoon + 40)/44;
// jour de pâques
int intDayPaques = intDaysEquinoxeBeforeFullMoon + 28 - 31*(intMonthPaques / 4);
// lundi de Pâques
Calendar calFerie = new GregorianCalendar(year,intMonthPaques-1,intDayPaques+1);
if(day.get(Calendar.DAY_OF_MONTH) == calFerie.get(Calendar.DAY_OF_MONTH)
&& day.get(Calendar.MONTH) == calFerie.get(Calendar.MONTH))
return false;
// Ascension
calFerie.add(Calendar.DAY_OF_YEAR,38);
if(day.get(Calendar.DAY_OF_MONTH) == calFerie.get(Calendar.DAY_OF_MONTH)
&& day.get(Calendar.MONTH) == calFerie.get(Calendar.MONTH))
return false;
//Pentecôte
/*calFerie.add(Calendar.DAY_OF_YEAR,11);
if(day.get(Calendar.DAY_OF_MONTH) == calFerie.get(Calendar.DAY_OF_MONTH)
&& day.get(Calendar.MONTH) == calFerie.get(Calendar.MONTH))
return false;*/
return true;
}
} |
Partager