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

Groovy Java Discussion :

Lister les jours fériés


Sujet :

Groovy Java

  1. #1
    Membre éclairé Avatar de laloune
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2005
    Messages
    484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2005
    Messages : 484
    Points : 870
    Points
    870
    Par défaut Lister les jours fériés
    Bonjour à tous,

    je cherche à lister les jours fériés içi en Bavière (ils n'ont pas les même que chez nous :-)

    j'ai commencé par lister les jours de pâque jusqu'à 2020, et ensuite j'ajoute ou retranche de façon classique pour avoir les jours fériés "mobiles". Sauf que j'ai un problème avec le code ci-dessous:

    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
    import java.text.SimpleDateFormat;
    import java.util.Date;
     
    def mapOsterTage=[
    '2011':'24.04.2011',
    '2012':'08.04.2012',
    '2013':'31.03.2013',
    '2014':'20.04.2014',
    '2015':'05.04.2015',
    '2016':'27.03.2016',
    '2017':'16.04.2017',
    '2018':'01.04.2018',
    '2019':'21.04.2019',
    '2020':'12.04.2020'
    ];
     
    def feiertage=[];
     
    for (i in 2011..2011)
    {
    currOsterTag=mapOsterTage[i.toString()];
    inputFormat= new SimpleDateFormat('dd.MM.yyyy');
    currOsterTagAsDate=inputFormat.parse(currOsterTag);
     
    Calendar cal=Calendar.getInstance()
    // set to Ostertag
    cal.setTime(currOsterTagAsDate);
     
    // Karfreitag
    cal.add(Calendar.DATE,-2);
    feiertage+=inputFormat.format(cal.getTime());
     
    // Ostermontag
    cal.add(Calendar.DATE,+1);
    feiertage+=inputFormat.format(cal.getTime());
     
    println feiertage[0];
    println feiertage[1];
     
    }
    en fait je voudrais que la date à laquelle j'ajoute ou retranche les jours soit fixe, or avec "cal.add" elle évolue au fur et à mesure. Le code ci-dessus produit:

    22.04.2011
    23.04.2011
    Or je souhaiterais:

    22.04.2011
    25.04.2011

    Une idée ?

    D'avance merci !
    laloune
    Consultant B.I.
    Spécialité(s): Excel, SQL, Business Intelligence (Jedox Palo, Talend)

    "A problem worthy of attack proves its worth by fighting back." Piet Hein

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 547
    Points : 21 602
    Points
    21 602
    Par défaut
    Créer un nouveau Calendar à chaque fois, au lieu de modifier celui qui sert de point de départ ?
    Avec clone() par exemple.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre éclairé Avatar de laloune
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2005
    Messages
    484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2005
    Messages : 484
    Points : 870
    Points
    870
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Créer un nouveau Calendar à chaque fois, au lieu de modifier celui qui sert de point de départ ?
    Avec clone() par exemple.
    ma foi, oui, ça fonctionne parfaitement !

    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
    import java.text.SimpleDateFormat;
    import java.util.Date;
     
    def mapOsterTage=[
    '2011':'24.04.2011',
    '2012':'08.04.2012',
    '2013':'31.03.2013',
    '2014':'20.04.2014',
    '2015':'05.04.2015',
    '2016':'27.03.2016',
    '2017':'16.04.2017',
    '2018':'01.04.2018',
    '2019':'21.04.2019',
    '2020':'12.04.2020'
    ];
     
    def feiertage=[];
     
    for (i in 2011..2011)
    {
    currOsterTag=mapOsterTage[i.toString()];
    inputFormat= new SimpleDateFormat('dd.MM.yyyy');
    currOsterTagAsDate=inputFormat.parse(currOsterTag);
     
    Calendar calendarFix=Calendar.getInstance()
    // set to Ostertag
    calendarFix.setTime(currOsterTagAsDate);
     
    cal=calendarFix.clone();
     
    // Karfreitag
    cal.add(Calendar.DATE,-2);
    feiertage+=inputFormat.format(cal.getTime());
     
    cal=calendarFix.clone();
    // Ostermontag
    cal.add(Calendar.DATE,+1);
    feiertage+=inputFormat.format(cal.getTime());
     
    println feiertage[0];
    println feiertage[1];
     
    }
    c'est moi ou l'utilisaton de Calendar me parait compliquée ? ca doit être moi :-P

    merci infiniment
    laloune
    Consultant B.I.
    Spécialité(s): Excel, SQL, Business Intelligence (Jedox Palo, Talend)

    "A problem worthy of attack proves its worth by fighting back." Piet Hein

  4. #4
    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 laloune Voir le message
    c'est moi ou l'utilisaton de Calendar me parait compliquée ? ca doit être moi :-P
    Ce n'est pas la meilleure API standard...
    Mais dans le cas précis c'est surtout un objet mutable, donc si tu le modifies plusieurs fois les modifications s'accumulent...


    Avec Java 8 tu as accès à la nouvelle API Date plus complète (et immuable).




    Sinon pour la date de Paques, il y a un algo assez simple (à recopier) pour récupérer cela de manière efficace : http://fr.wikipedia.org/wiki/Calcul_...thode_de_Meeus
    Exemple en Java (mais cela doit être sensiblement la même chose en Groovy) :
    Code java : 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
    	public static Date paques(final int year) {
    		if (year < 1583) {
    			throw new IllegalArgumentException("year="+year);
    		}
    		final int n = year%19;
    		final int c = year/100;
    		final int u = year%100;
    		final int s = c / 4;
    		final int t = c % 4;
    		final int p = (c+8)/25;
    		final int q = (c-p+1)/3;
    		final int e = (19*n + c - s - q + 15) % 30;
    		final int b = u / 4;
    		final int d = u % 4;
    		final int L = (32 + 2*t + 2*b - e - d) % 7;
    		final int h = (n + 11*e + 22* L) / 451;
     
    		final int dividende = (e + L - 7*h + 114);
    		final int month = dividende / 31;
    		final int date = dividende % 31;
     
    		Calendar cal = Calendar.getInstance();
    		cal.clear();
    		cal.set(year, month-1, date+1, 12, 00);
    		return cal.getTime();
    	}


    a++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SQL2005] Exclure les jours fériés
    Par NicoNGRI dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 05/06/2009, 15h41
  2. Backup d'une BD (sauf les jours fériés)
    Par yves_belanger dans le forum Administration
    Réponses: 1
    Dernier message: 20/01/2009, 10h03
  3. problème pour enlevé les jours fériés
    Par titi67 dans le forum Général VBA
    Réponses: 2
    Dernier message: 12/05/2007, 12h44
  4. [Dates] Gestion d'un calendrier avec les jours fériés
    Par maximenet dans le forum Langage
    Réponses: 4
    Dernier message: 05/05/2006, 09h41
  5. Les jours fériés.
    Par davcha dans le forum Langage SQL
    Réponses: 8
    Dernier message: 18/01/2006, 15h03

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