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 88 89
|
private static boolean isJourFerie(String dateStr){
//String datetr = "04-05-2010";
SimpleDateFormat curFormater = new SimpleDateFormat("dd-MM-yyyy");
Date dateObj = null;
try {
dateObj = curFormater.parse(dateStr);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Calendar p_date = Calendar.getInstance();
p_date.setTime(dateObj);
// On constitue la liste des jours fériés
final List < Calendar > joursFeries = new ArrayList < Calendar > ();
// On recherche les jours fériés de l'année de la date en paramètre
final Calendar jourFerie = (Calendar) p_date.clone();
jourFerie.set(jourFerie.get(Calendar.YEAR), Calendar.JANUARY, 1);
joursFeries.add((Calendar) jourFerie.clone());
jourFerie.set(jourFerie.get(Calendar.YEAR), Calendar.MAY, 1);
joursFeries.add((Calendar) jourFerie.clone());
jourFerie.set(jourFerie.get(Calendar.YEAR), Calendar.MAY, 8);
joursFeries.add((Calendar) jourFerie.clone());
jourFerie.set(jourFerie.get(Calendar.YEAR), Calendar.JULY, 14);
joursFeries.add((Calendar) jourFerie.clone());
jourFerie.set(jourFerie.get(Calendar.YEAR), Calendar.AUGUST, 15);
joursFeries.add((Calendar) jourFerie.clone());
jourFerie.set(jourFerie.get(Calendar.YEAR), Calendar.NOVEMBER, 1);
joursFeries.add((Calendar) jourFerie.clone());
jourFerie.set(jourFerie.get(Calendar.YEAR), Calendar.NOVEMBER, 11);
joursFeries.add((Calendar) jourFerie.clone());
jourFerie.set(jourFerie.get(Calendar.YEAR), Calendar.DECEMBER, 25);
joursFeries.add((Calendar) jourFerie.clone());
// Calcul du jour de pâques (algorithme de Oudin (1940))
// Calcul du nombre d'or - 1
final int intGoldNumber = p_date.get(Calendar.YEAR) % 19;
// Année divisé par cent
final int intAnneeDiv100 = (int) (p_date.get(Calendar.YEAR) / 100);
// intEpacte est = 23 - Epacte (modulo 30)
final 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
final 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)
final int intWeekDayMoonFull = (p_date.get(Calendar.YEAR)
+ p_date.get(Calendar.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)
final int intDaysEquinoxeBeforeFullMoon =
intDaysEquinoxeToMoonFull - intWeekDayMoonFull;
// mois de pâques
final int intMonthPaques = 3
+ (intDaysEquinoxeBeforeFullMoon + 40) / 44;
// jour de pâques
final int intDayPaques = intDaysEquinoxeBeforeFullMoon + 28
- 31 * (intMonthPaques / 4);
// lundi de pâques
jourFerie.set(
p_date.get(Calendar.YEAR), intMonthPaques - 1, intDayPaques + 1);
final Calendar lundiDePaque = (Calendar) jourFerie.clone();
joursFeries.add(lundiDePaque);
// Ascension
final Calendar ascension = (Calendar) lundiDePaque.clone();
ascension.add(Calendar.DATE, 38);
joursFeries.add(ascension);
//Pentecote
final Calendar lundiPentecote = (Calendar) lundiDePaque.clone();
lundiPentecote.add(Calendar.DATE, 48);
joursFeries.add(lundiPentecote);
if (joursFeries.contains(p_date)
|| p_date.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY
|| p_date.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {
return true;
}
return false;
} |
Partager