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

API standards et tierces Java Discussion :

Comment calculer un jour de la semaine avec Joda


Sujet :

API standards et tierces Java

  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 534
    Points : 562
    Points
    562
    Par défaut Comment calculer un jour de la semaine avec Joda
    Bonjour,

    J'ai essayé de calculer par exemple le 3 ième Mercredi du mois à partir de la date donnée avec le pakage joda DateTime mais je ne trouve pas comment le faire.

    Pourriez-vous me donner quelques indications?

    Pour l'instant je dois passer par API GregorianCalendar:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public static getDayOfWeekFromDate
                                                      (DateTime date,
                                                        int          dayOfWeek,
                                                        int          dayOfWeekInMonth)
    {
          java.util.GregorianCalendar _date  =   date.toGregorianCalendar();
          _date.set(GregorianCalendar.DAY_OF_WEEK, dayOfWeek);
         _date.set(GregorianCalendar.DAY_OF_WEEK_IN_MONTH, dayOfWeekInMonth);
     
         return new DateTime(_date);   
    }
    Merci d'avance

  2. #2
    Membre actif Avatar de aperrin
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    221
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 221
    Points : 272
    Points
    272
    Par défaut
    new DateTime().withDayOfMonth(1).plusWeek(3).withDayOfWeek(4);

    Pour le 4 je ne suis plus sur si lundi = 1 ou lundi = 2 (ou lundi = 0)

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 534
    Points : 562
    Points
    562
    Par défaut Comment calculer la date du 3ème Mercredi du mois
    J'ai trouvé ceci

    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
    
    public static getDayOfWeekFromDate(DateTime date, int dayOfWeek, int weekOfMonth)
    {
        // Calculer le 1er jour du mois
        DateTime  dateTmp = date.dayOfMonth().withMinimumValue();
    
        // Calculer le jour de la semaine pour 1er jour du mois
        int dow = dateTmp.getDayOfWeek();
    
        // Ajuster le jour
        DateTime result = dateTmp.plusDays((dayOfWeek - dow + 7) % 7);
    
        // Ajuster la semaine avant retourner la date
        return result.plusWeeks(weekOfMonth - 1);
    }
    

  4. #4
    Membre confirmé
    Inscrit en
    Juillet 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 534
    Points : 562
    Points
    562
    Par défaut
    Avec cette fonction
    new DateTime().withDayOfMonth(1).plusWeeks(3).withDayOfWeek(DateTimeConstants.WEDNESDAY) qui donne 2008-09-24, je n'ai pas pu trouver la bonne date.


    Après modification,
    new DateTime().withDayOfMonth(1).plusWeeks(3 -1).withDayOfWeek(DateTimeConstants.WEDNESDAY) il retourne la date correcte.


    Merci

  5. #5
    Membre confirmé
    Inscrit en
    Juillet 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 534
    Points : 562
    Points
    562
    Par défaut
    J'ai parlé trop vide: Pour les mois qui ont 4 semaines ou 5 semaines, ca marche mais si on demande
    5ème Mercredi pour 2008-09-08 on trouve 2008-10-01
    5ème Mardi pour 2008-09-08 on trouve 2008-09-30

    Cette fonction a une limitation: l'argument weekOfMonth dois être valide.

  6. #6
    Membre actif Avatar de aperrin
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    221
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 221
    Points : 272
    Points
    272
    Par défaut
    J'ai essayé de calculer par exemple le 3 ième Mercredi du mois à partir de la date donnée
    !!!!!!!!!

    Ce code n'était prévu que pour déterminer le 3 ème mercredi d'un mois. La fonction plusWeek ajoute le nombre de semaine renseigné si c'est 7 c'est tota date + 7 semaines. Qu'est ce que tu veut faire exactement ?

  7. #7
    Membre actif
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mars 2002
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mars 2002
    Messages : 192
    Points : 252
    Points
    252
    Par défaut
    Voilà pour calculer le Xème jour du mois.
    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
    public class TimeCalculation {
        /**
         * 
         * @param aDayInMonth a date used to extract the year and month
         * @param which
         * @param dayOfWeek 1->7 for Monday -> Sunday @see DateTimeConstants
         * @return
         */
        public static DateTime getXDayInMonth(DateTime aDayInMonth, int which, int dayOfWeek) {
            DateTime firstOfMonth = aDayInMonth.withDayOfMonth(1);
            int startDayOfMonth = firstOfMonth.dayOfWeek().get();
     
            DateTime result;
     
            if (!(DateTimeConstants.MONDAY <= dayOfWeek && dayOfWeek <= DateTimeConstants.SUNDAY)) {
                throw new IllegalArgumentException("dayOfWeek is invalid should be between " + DateTimeConstants.MONDAY + " & " + DateTimeConstants.SUNDAY);
            }
            if (which < 1 || which > 5) {
                throw new IllegalArgumentException("which parameter is invalid should be 1 <= chich <= 5");
            }
     
            if (startDayOfMonth < dayOfWeek) {
                // The required day exists in the first week of the month, so the Xeme is located (X-1) week later
                result = firstOfMonth.plusWeeks(which - 1).withDayOfWeek(dayOfWeek);
            } else {
                result = firstOfMonth.plusWeeks(which).withDayOfWeek(dayOfWeek);
            }
     
            if (!(aDayInMonth.getYear() == result.getYear() && aDayInMonth.getMonthOfYear() == result.getMonthOfYear())) {
                throw new IllegalArgumentException("asked day does not exist in the month, check the parameters");
            }
     
            return result;
        }
     
        /**
         * @param args
         */
        public static void main(String[] args) {
            DateTime day = new DateTime().withYear(2008).withMonthOfYear(DateTimeConstants.OCTOBER).withDayOfMonth(10);
     
            DateTimeFormatter fmt = DateTimeFormat.forPattern("dd/MM/yyyy");
            System.out.println("Base day is: " + fmt.print(day));
            // 3rd SUNDAY of October/2008
            System.out.println(fmt.print(getXDayInMonth(day, 3, DateTimeConstants.SUNDAY)));
            // 5rd SUNDAY of October/2008
            System.out.println(fmt.print(getXDayInMonth(day, 5, DateTimeConstants.THURSDAY)));
            // 5rd TUESDAY of October/2008 => Error does not exists
            System.out.println(fmt.print(getXDayInMonth(day, 5, DateTimeConstants.TUESDAY)));
        }
    }

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 18/09/2009, 15h30
  2. Réponses: 1
    Dernier message: 18/04/2008, 15h40
  3. comment trouver le jour de la semaine d'une date ?
    Par mon_proj dans le forum wxPython
    Réponses: 2
    Dernier message: 13/04/2008, 23h27
  4. Changement du jour de la semaine avec java.util.GregorianCalendar
    Par Alexandre T dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 10/09/2007, 11h01
  5. [Dates] comment récupérer le jour de la semaine ?
    Par magic8392 dans le forum Langage
    Réponses: 5
    Dernier message: 13/09/2005, 16h01

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