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 :

Recuperer la date du jour j-1


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    525
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 525
    Par défaut Recuperer la date du jour j-1
    salut,

    encore des pbs avec les dates. En fait je souhairte récupérer la date j-1, c'est à dire la date de la veille.
    je fais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      Calendar fromdateCal = Calendar.getInstance();
     
    	                    fromdateCal.set(Calendar.YEAR, Calendar.getInstance().getTime().getYear());
    	                    fromdateCal.set(Calendar.DAY_OF_MONTH, fromdateCal.getTime().getDay() - 1);
    	                    fromdateCal.set(Calendar.MONTH, fromdateCal.getTime().getMonth());
    mais j'ai cette date comme résultat :

    Apr 02 10:03:24 CET 0107

    comment faire pour recuperer la date de la veille ? et si je veux recuperer par exemple le precedent jour ouvré, par exemple on est lundi, je veux donc vendredi , comment faire ?

    merci pour votre aide

  2. #2
    Membre émérite Avatar de remika
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    806
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 806
    Par défaut
    Tu prends le jour sans calcul et tu utilises la méthode add de Calendar

    Pour les jours ouvrés je ne sais pas
    Un bidouillage consisterait à retirer 3 jours quand tu as un lundi au départ... Mais ça ne prend pas en compte les jours fériés...

  3. #3
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Par défaut
    Pour les jours ouvrés, ce n'est pas géré directement par Java ...
    A lire éventuellement Gestion jours fériés

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 44
    Par défaut
    Exact utiliser add :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            Calendar cal = GregorianCalendar.getInstance(Locale.FRANCE);
            cal.add(Calendar.DAY_OF_YEAR, -1);
    Pour les jours ouvrés faire une boucle avec un add(..., -1), regarder le jour de la semaine et continuer la boucle tant que ce n'est pas un jour ouvré (attention avec cal.get(Calendar.DAY_OF_WEEK) 0 c'est dimanche, 1 c'est lundi etc).

  5. #5
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    525
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 525
    Par défaut
    Citation Envoyé par pgervaise
    Exact utiliser add :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            Calendar cal = GregorianCalendar.getInstance(Locale.FRANCE);
            cal.add(Calendar.DAY_OF_YEAR, -1);
    Pour les jours ouvrés faire une boucle avec un add(..., -1), regarder le jour de la semaine et continuer la boucle tant que ce n'est pas un jour ouvré (attention avec cal.get(Calendar.DAY_OF_WEEK) 0 c'est dimanche, 1 c'est lundi etc).
    oui mais j'ai envie aussi de recuperer l'nnée courante, je n'est pas envie de setter une statiqument et ceci par un getYear() ... mais ça ne marche pas.
    j'ai 0107 comme année au lieu de 2007.

    en plus en faisant ce que tu viens de me dire, j'ai la date du 30 decembre 2006, ce n'est pas à cause du day of year ?

  6. #6
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Par défaut
    Je vois pas pourquoi tu veux faire un set sur l'année ou le mois, vu que tu veux te positionner par rapport à la date du jour et que ton calendar est déjà à cette date ...
    De plus, même si tu le voulais, il faudrait le faire avec Calendar et non avec les getXXX de la classe Date (signalés deprecated au passage).
    Tu obtiens 30 Décembre 2006 quand tu fais quoi exactement ??

  7. #7
    Membre émérite Avatar de remika
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    806
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 806
    Par défaut
    Sinon j'ai fait une fonction pompée sur un code C# pour calculer si un jour est travaillé. Il peut être amélioré : prendre la Locale en paramètre, prendre en compte ou non la Pentecôte ou les samedis, ne pas dépendre des valeurs définies pour les mois et les jours de la semaine...

    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
     
    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;
        }
    }
    (je sais pas si il y a déjà ce genre de source sur le site, si ce n'est pas le cas ce serait pas mal d'ajouter cette méthode - améliorée certainement - aux sources du site)

Discussions similaires

  1. [MySQL] Recuperer la date du jour au format souhaité et l'ajouter à un champ de BDD
    Par artenis dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 23/04/2012, 15h49
  2. Réponses: 1
    Dernier message: 18/10/2010, 23h19
  3. Recuperation de date de jour(systeme)
    Par ala1986 dans le forum MFC
    Réponses: 2
    Dernier message: 07/04/2008, 09h14
  4. Réponses: 1
    Dernier message: 20/12/2007, 14h34
  5. Recuperation de la date du jour precedent
    Par ninsekh dans le forum C#
    Réponses: 1
    Dernier message: 22/08/2007, 18h02

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