IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

Comment savoir si un jour est férié ?


Sujet :

Collection et Stream Java

  1. #1
    Membre habitué
    Femme Profil pro
    Inscrit en
    Mai 2012
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 360
    Points : 139
    Points
    139
    Par défaut Comment savoir si un jour est férié ?
    Bonjour,
    Je suis en train de développer un application de gestion des horaires, mais je n'arrive pas à savoir si pour un jour donné, il est férié ou non.
    La valeur que je souhaiterai mettre en paramètre est de format "13-11-2016" est ce dernier est enregistré en base de donné comme une String.

    Si par hasard quelqu'un pourrait m'aider, je vous en serai très reconnaissante.

    En cherchant sur le forum, j'ai trouvé cette méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    private static boolean isJourTravaille(Calendar p_date)
        {
            // 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)
                    / Constantes.FACTEUR_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 false;
            }
            return true;
        }
    mais quelque part dans la fonction, il est fait appel à une classe "Constantes", mais je ne sais pas à quoi elle correspond.
    De plus, il faut faire passer en paramètre un calendar et je galère un max.

    Merci beaucoup du coup de main.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Hello,

    la seule solution est de regarder, genre par exemple pour les dix prochaines années, quels jours seront probablement fériés, en faire la liste, l'écrire dans un fichier, et faire en sorte que ton programme regarde si la date donnée est dans la liste des jours fériés.

    Si nécessaire un système de mises à jour du calendrier des jours fériés peut être à prévoir.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par leara500 Voir le message
    mais quelque part dans la fonction, il est fait appel à une classe "Constantes", mais je ne sais pas à quoi elle correspond.
    De plus, il faut faire passer en paramètre un calendar et je galère un max.
    S'il te manque une partie du code on ne pourra pas trop t'aider...

    Par contre si tu utilises Java 8 je te conseille de privilégier la nouvelle API de dates aux Calendar...



    Citation Envoyé par thelvin Voir le message
    la seule solution est de regarder, genre par exemple pour les dix prochaines années, quels jours seront probablement fériés, en faire la liste, l'écrire dans un fichier, et faire en sorte que ton programme regarde si la date donnée est dans la liste des jours fériés.

    Si nécessaire un système de mises à jour du calendrier des jours fériés peut être à prévoir.
    Non en France c'est assez simple à faire.

    En fait il y a 2 types de jours fériés, ceux qui sont à date constant (1er de l'an, 14 juillet, etc.) et les fêtes religieuses qui dépendent de la date de Päques (mardi gras, pentecôte, ...).

    Donc le plus dur c'est de calculer la date de Paques, mais heureusement il existe plusieurs algo pour cela assez simple à mettre en oeuvre (mais moins à comprendre).
    Exemple avec le calcul de Meeus : https://fr.wikipedia.org/wiki/Calcul...thode_de_Meeus
    On peut faire ceci pour obtenir la date de paques :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    	public static LocalDate paques(int year) {
    		if (year < 1583) {
    			throw new IllegalStateException();
    		}
    		int n = year % 19;
    		int c = year / 100;
    		int u = year % 100;
    		int s = c / 4;
    		int t = c % 4;
    		int p = (c + 8) / 25;
    		int q = (c - p + 1) / 3;
    		int e = (19 * n + c - s - q + 15) % 30;
    		int b = u / 4;
    		int d = u % 4;
    		int L = (32 + 2 * t + 2 * b - e - d) % 7;
    		int h = (n + 11 * e + 22 * L) / 451;
    		int m = (e + L - 7 * h + 114) / 31;
    		int j = (e + L - 7 * h + 114) % 31;
     
    		return LocalDate.of(year, m, j + 1);
    	}

    Ensuite il ne nous reste plus qu'à déterminer si un jour est férié, éventuellement en se basant sur la date de paques :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    	public static boolean ferie(LocalDate date) {
    		final int day = date.getDayOfMonth();
    		switch (date.getMonth()) {
    		case JANUARY:
    			if (day == 1 || day == 6) {
    				// Jour de l'an et Epiphanie
    				return true;
    			}
    			break;
    		case FEBRUARY:
    			if (day == 14) {
    				// St Valentin
    				return true;
    			}
    			break;
    		case MAY:
    			if (day == 1 || day == 8) {
    				// Fête du travail et Victoire 1945
    				return true;
    			}
    			break;
    		case JULY:
    			if (day == 14) {
    				// Fête Nationale
    				return true;
    			}
    			break;
    		case AUGUST:
    			if (day == 15) {
    				// Assomption
    				return true;
    			}
    			break;
    		case NOVEMBER:
    			if (day == 1 || day == 11) {
    				// Toussaint et Armistice 1918
    				return true;
    			}
    			break;
    		case DECEMBER:
    			if (day == 25 || day == 31) {
    				// Noël et Saint-sylvestre
    				return true;
    			}
    			break;
    		default:
    		}
     
    		if (date.getMonthValue() < 7) {
    			// Avant juillet on doit aussi vérifier les fêtes liées à Paques
    			LocalDate paques = paques(date.getYear());
    			int days = (int) ChronoUnit.DAYS.between(paques, date);
    			switch (days) {
    			case -47: // mardi gras : 47 jours avant Pâques
    			case 0: // Paques
    			case 1: // lundi de Pâques : 1 jour après Pâques
    			case 39: // Ascension : 39 jours après Pâques
    			case 50: // Pentecôte : 50 jours après Pâques
    			case 51: // L. de Pentecôte : 51 jours après Paques
    				return true;
    			}
    		}
    		return false;
    	}

    a++

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par adiGuba Voir le message

    Non en France c'est assez simple à faire.
    Tant que la loi ne change pas. C'est plus facile et stable selon moi de demander à un opérateur d'encoder les jours fériés de l'année que de faire confiance au futures politques gouvernementale. C'est ce que font la plupart des applis RH que j'ai vu jusqu'à présent et au moins c'est portable à d'autres pays sans prise de tête

  5. #5
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Tant que la loi ne change pas. C'est plus facile et stable selon moi de demander à un opérateur d'encoder les jours fériés de l'année que de faire confiance au futures politques gouvernementale. C'est ce que font la plupart des applis RH que j'ai vu jusqu'à présent et au moins c'est portable à d'autres pays sans prise de tête
    Ah oui çà c'est sûr !

    Bon au pire tu peux quand même utiliser çà pour préremplir le calendrier, quitte à la faire valider manuellement pour chaque année...


    a++

  6. #6
    Membre habitué
    Femme Profil pro
    Inscrit en
    Mai 2012
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 360
    Points : 139
    Points
    139
    Par défaut
    Merci beaucoup pour vos réponses.

    Avec cette méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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;
    	    }
    Les jours fériés qui change d'une année sur l'autre ne sont pas trouvé

    Je vais tenter la méthode de adiGuba même si je ne comprend pas tout. Sinon, au pire, je listerai tous les jours fériés qui existe pour année donnée.

    C'est dommage qu'il n'existe pas un algo simple pour déterminer les jours férié

  7. #7
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    C'est dommage, oui. Mais ce sont des gens et pas les mathématiques, qui déterminent si on travaille tel jour ou pas.

    Il n'y a pas grand-chose à y faire.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Tant que la loi ne change pas. C'est plus facile et stable selon moi de demander à un opérateur d'encoder les jours fériés de l'année que de faire confiance au futures politques gouvernementale. C'est ce que font la plupart des applis RH que j'ai vu jusqu'à présent et au moins c'est portable à d'autres pays sans prise de tête
    Oui, surtout qu'en plus, jour férié dans certaines applications sert de synonyme à jour chômé, ou à autre chose. Et comme il y a les jours fériés de droit local selon les régions, les jours pseudo-fériés selon les accords de branches (différents pour les travailleurs ou les écoliers, etc), ou d'entreprise (genre les lundis chômés parce qu'un jour férié tombe un dimanche), vaut mieux une table. Et je passe les cas encore plus particuliers. J'ai travaillé pour la presse et il fallait imprimer en automatique la date de parution (genre nom du jour + numéro dans le mois + mois + année, la semaine, et le week-end : les 2 jours sous forme "Samedi x et dimanche y du mois année"), sur chaque page du quotidien en semaine, : cas particulier, on ne pouvait pas imprimer le "1er mai" comme date , à cause des accords syndicaux, même pour un journal paraissant le 1er mai, y compris pour un journal paraissant le samedi 1er mai ou le dimanche 1er mai... par calcul/code, on aurait pu le faire, mais par table c'est bien plus simple, le client fait ce qu'il veut et s'il veut faire un numéro spécial commémoration de la révolution avec thermidor ou fructidor comme nom de mois, ou autres trucs (en classique il y'a le double numéro mensuel d'été aussi) il peut sans impact sur le code.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  9. #9
    Membre chevronné

    Homme Profil pro
    Responsable projets techniques
    Inscrit en
    Février 2003
    Messages
    980
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable projets techniques
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2003
    Messages : 980
    Points : 1 894
    Points
    1 894
    Par défaut
    Bonjour,

    Mes excuses de remonter un post aussi vieux mais j'ai un souci avec la seconde partie de ce code (au demeurant excellent, merci beaucoup !), celle qui détermine si un jour est férié en calculant le nombre de jours avec Pâques.

    Sauf erreur de ma part, le lundi de Pentecôte arrive 50 jours après Pâques et non 51 !
    Si je ne me suis pas trompé, je pense que ça vaut le coup de corriger sinon on va avoir des trucs bizarres

    Citation Envoyé par adiGuba Voir le message
    Salut,
    ...
    Ensuite il ne nous reste plus qu'à déterminer si un jour est férié, éventuellement en se basant sur la date de paques :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    	public static boolean ferie(LocalDate date) {
    ...
    			case 39: // Ascension : 39 jours après Pâques
    			case 49: // Pentecôte : 50 jours après Pâques
    			case 50: // L. de Pentecôte : 51 jours après Paques
    				return true;
    			}
    		}
    		return false;
    	}

    a++

    Par ailleurs, depuis 2005 et le jour de solidarité, le lundi de Pentecôte peut ne plus être férié (ça va dépendre des entreprises) donc pour mon besoin, j'ai fait ceci (j'ai supprimé les dimanches et le mardi gras et j'ai ajouté le test sur l'année) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    switch (days) {
    	case 1: // lundi de Pâques
    	case 39: // jeudi de l'Ascension
    		return true;
    	case 51: // lundi de Pentecôte
    		if (year < 2005) return true;
    }
    Merci encore pour le bout de code qui m'a bien dépanné !

  10. #10
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Je pense en effet qu'on peut être assez certain qu'un lundi n'arrive pas 50 jours après un autre lundi, et que quelque chose comme 49 jours est au moins plus crédible.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. [Python2.4] Comment savoir si une date est jour férié ou pas ?
    Par Ekimasu dans le forum Général Python
    Réponses: 10
    Dernier message: 30/03/2007, 16h34
  2. Comment savoir si un Shell est terminé ?
    Par Mr Capone dans le forum VB 6 et antérieur
    Réponses: 14
    Dernier message: 21/02/2005, 17h05
  3. [Access] Comment savoir qu'un champs est vide ?
    Par Oberown dans le forum ASP
    Réponses: 9
    Dernier message: 25/10/2004, 10h47
  4. Unix - Comment savoir si un fichier est ouvert
    Par freddyboy dans le forum C
    Réponses: 7
    Dernier message: 06/10/2004, 15h53
  5. Comment savoir qu'une fonction est standard ?
    Par D[r]eadLock dans le forum C
    Réponses: 5
    Dernier message: 24/03/2003, 14h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo