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 :

Calendrier en Java


Sujet :

Collection et Stream Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 13
    Points : 7
    Points
    7
    Par défaut Calendrier en Java
    Bonjour,
    Etant débutant en programmation Java, je souhaiterais avoir une aide sur le programme suivant (non terminé, pour cause de blocage et d'énervement !), regardez les parties en rouge (je doute fortement sur la méthode "j_d_m" ainsi que sur l'affichage des dates suivantes), si vous avez des propositions d'amélioration significative de tout ceci n'hésitez-pas ! merci d'avance...

    :

    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
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
     import java.util.*;
    
    
        public class DateBasicJourSuivantEleve {
       
       //Calcul du nombre de jour dans un mois donne d'une annee donnee
       //methode de classe !
       
           static int j_d_m(int leMois, int lAnnee){
          
          //Entrees - leMois : mois codé par un entier allant de 1 à 12
          //                lAnnée : l'année 
          //Sortie : le nombre de jours pour le mois de l'année donnés (année bissextile ou non)
          
          
              int j_d_m;
    
             if(leMois==1||leMois==3||leMois==5||leMois==7||leMois==8||leMois==10||leMois==12) 
    
                j_d_m=31;
             else j_d_m=30;
    
             //if(leMois==4||leMois==6||leMois==9||leMois==11)j_d_m = 30;
             if(leMois==2) {
                if(lAnnee%4!=0||(lAnnee%100==0&&lAnnee%400!=0)) j_d_m=28;
                else j_d_m=29;
             }                                
              //
          
             return j_d_m;
          
          }//j_d_m
       
       
        
       
           public static void main(String [] args) {
          
          
             Date maintenant;
             long tdebut,tempsCourant = System.currentTimeMillis ();
             int diftemp, d,m,a,da,h,min,sec;
          
             maintenant = new Date();
             GregorianCalendar Calendar = new GregorianCalendar();
             Calendar.setTime(maintenant); 
          
          
             a=Calendar.get(Calendar.YEAR);          // année
             m=Calendar.get(Calendar.MONTH);         // mois de 0 à 11 et non 1 à 12 !!!!
          //(la raison de ce codage m'est inconnue mais je conserve cette notation)
             da=Calendar.get(Calendar.DAY_OF_MONTH); // jour du mois 1 à 31
             d=Calendar.get(Calendar.DAY_OF_WEEK);   // jour de la semaine de 1 à 7
          //    h=Calendar.get(Calendar.HOUR);          // heure de 0 à 11
             h=Calendar.get(Calendar.HOUR_OF_DAY);   // heure de 0 à 23
             min=Calendar.get(Calendar.MINUTE);          // minutes de 0 à 59
             sec=Calendar.get(Calendar.SECOND);      // secondes de 0 à 59
          
          // affichage de la date          
             System.out.println(String.valueOf(da)+"/"+String.valueOf(m+1)+"/"+String.valueOf(a));
             System.out.println(jour[d]+" "+ String.valueOf(da)+" "+ mois[m]+" "+String.valueOf(a));
          //Test j_d_m
             System.out.println("Le nombre de jours dans le mois " + 1 + " de l'année " + 2002 + " est :" + j_d_m(1, 2002));
             System.out.println("Le nombre de jours dans le mois " + 2 + " de l'année " + 2002 + " est :" + j_d_m(2, 2002));
             System.out.println("Le nombre de jours dans le mois " + 4 + " de l'année " + 2002 + " est :" + j_d_m(4, 2002));
             System.out.println("Le nombre de jours dans le mois " + 12+ " de l'année " + 2002 + " est :" + j_d_m(12,2002));
             System.out.println("Le nombre de jours dans le mois " + 2 + " de l'année " + 2004 + " est :" + j_d_m(2, 2004));
             System.out.println("Le nombre de jours dans le mois " + 2 + " de l'année " + 2000 + " est :" + j_d_m(2, 2000));
             System.out.println("Le nombre de jours dans le mois " + 2 + " de l'année " + 2100 + " est :" + j_d_m(2, 2100));
          
           // affichage des dates suivantes
             for(int i = 1; i <= 80; i++) {
                da++;
                if(da==32 && (m==0||m==2||m==4||m==6||m==7||m==9||m==11))
                {da=1;m++;}
                else{
    
                   if((m==3||m==5||m==8||m==10)&&da==31) {da=1;m++;}
                   else
                   {
                      if((a%4!=0||(a%100==0&&a%400!=0))&&da==29 &&m==1) {da=1;m++;}
                      else {
                          if(m==11&&da==32){m=0;d=1;a++;}
                   }    }  }               
             
                System.out.println(String.valueOf(da)+"/"+String.valueOf(m+1)+"/"+String.valueOf(a));
             
             }//for
          
          
          }//main
       
       
          private final static String jour[] = {
             
             " ","dimanche","lundi", "mardi", "mercredi", "jeudi","vendredi",
             "samedi" 
             
             };
       
       
          private final static String mois[] = {
             
             "janvier", "févier", "mars", "avril", "mai", "juin",
             "juillet", "août", "septembre", "octobre", "novembre", "décembre"
             
             
             };
       
       
       } //DateBasicJourSuivantEleve

  2. #2
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 813
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 813
    Points : 7 638
    Points
    7 638
    Par défaut
    Salut,

    Citation Envoyé par r-o-m-z
    je doute fortement sur la méthode "j_d_m" ainsi que sur l'affichage des dates suivantes)
    Etant donné que l'on n'est pas psychologues, ce serait plus utile de nous dire ce qui cloche réellement...
    Et ça nous éviterait d'avoir à recopier le code, le compiler, et le tester...


    Citation Envoyé par r-o-m-z
    si vous avez des propositions d'amélioration significative de tout ceci n'hésitez-pas !
    Ben... à quoi cela sert-il de définir une méthode j_d_m si tu ne l'utilises pas dans le main et que tu y refais tout???
    En plus, en ajoutant des erreurs, vu que ça plante pour le 32 décembre... (ce qui est logique, vu que dans ton test, tu vérifies le jour dans le if, et tu vérifies le mois dans le else... alors qu'il faudrait le faire en consécutif...)

    Pour la suite, essaie d'utiliser les balises [ code ] pour tes listings (le petit bouton "#" ), c'est beaucoup plus lisible (et mets une mise en forme lisible également... indentation, commentaires, ...)
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  3. #3
    Membre éclairé
    Avatar de bbclone
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 537
    Points : 704
    Points
    704
    Par défaut
    bon regarde un peu plus en detail le contenu des classe GregorianCalendar et Calendar.

    -> http://java.sun.com/j2se/1.5.0/docs/.../Calendar.html


    et teste apres ce code...
    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
     
    import java.util.Calendar;
    import java.util.GregorianCalendar;
    import java.util.Locale;
    import java.util.Random;
     
    /**
     * Created by IntelliJ IDEA.
     * User: bebe
     * Date: 21-Oct-2006
     * Time: 13:44:32
     * To change this template use File | Settings | File Templates.
     */
    public class Test {
        private static Calendar calendar = GregorianCalendar.getInstance(Locale.FRANCE);
     
        public static void main(String[] args) {
            Random r = new Random();
            for (int i = 0; i < 50; i++) {
                int year = r.nextInt(150) + 1950;
                int month = r.nextInt(12) + 1;// 1 = January
     
                System.out.printf("%d/%d -> %d days\n", month, year, getDays(month, year));
            }
        }
     
        public static int getDays(int month, int year) {
            calendar.set(Calendar.YEAR, year);
            calendar.set(Calendar.MONTH, month-1); // Months in calendar are 0-based.
     
            return calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
        }
    }

  4. #4
    Membre régulier Avatar de BoudBoulMan
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 100
    Points : 116
    Points
    116
    Par défaut
    Et aussi, pour voir si une année est bissextile, y a plus simple que de faire des modulos et tout le tralala, le classe GregorianCalendar fournit le méthode isLeapYear(int year); qui renvoit true si l'année passée en argument est une année bissextile

    Et sinon, comme l'a montré bbclone, le plus simple est de paramétré le mois et l'année du GregorianCalendar par ceux passés en argument à ta méthode et d'ensuite faire un getActualMaximum(Calendar.DAY_OF_MONTH) qui renverra le numéro maximum qui peut être retourner (donc le nombre de jours dans le mois indiqué et dans l'année indiquée, donc inutile de faire des tests sur l'année)

    Voilà, j'espère t'avoir été utile
    Et n'oublies pas d'aller consulter la documentation officielle.
    La forme des pyramides le prouve, l'homme a toujours eu tendance à en faire de moins en moins.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 13
    Points : 7
    Points
    7
    Par défaut Re: Calendrier en Java
    Merci pour vos réponses, pour être clair :
    >je répond à plegat :
    à quoi cela sert-il de définir une méthode j_d_m si tu ne l'utilises pas dans le main et que tu y refais tout???=>justement comme je suis un peu débutant, je ne sais pas comment faire comme un appel de fonction j_d_m dans la partie "affichage des dates suivantes" pour pouvoir exploiter j_d_m, en tout cas je souhaite laisser ma "static int j_d_m(int leMois, int lAnnee){". Je souhaite garder " // affichage des dates suivantes
    for(int i = 1; i <= 80; i++) {".
    Et merci de me donner des solutions sous forme de code Java si possible, parce que j'ai du mal à y voir clair ! j'imagine que vous aussi !

  6. #6
    Membre régulier Avatar de BoudBoulMan
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 100
    Points : 116
    Points
    116
    Par défaut
    Citation Envoyé par r-o-m-z
    Et merci de me donner des solutions sous forme de code Java si possible, parce que j'ai du mal à y voir clair ! j'imagine que vous aussi !
    bbclone t'a déjà donné une solution
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public class Test {
        private static Calendar calendar = GregorianCalendar.getInstance(Locale.FRANCE);
     
    public static int getDays(int month, int year) {
            calendar.set(Calendar.YEAR, year);
            calendar.set(Calendar.MONTH, month-1); // Months in calendar are 0-based.
     
            return calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
        }
    }
    La forme des pyramides le prouve, l'homme a toujours eu tendance à en faire de moins en moins.

Discussions similaires

  1. [Jcalendar] construire un agenda /calendrier avec java.
    Par Battant dans le forum Composants
    Réponses: 3
    Dernier message: 08/06/2010, 11h57
  2. [Swing] Calendrier en Java
    Par empire.dev dans le forum Débuter
    Réponses: 58
    Dernier message: 16/09/2009, 15h30
  3. Calendrier graphique java
    Par projet16 dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 22/11/2007, 11h27
  4. calendrier en java
    Par le_tigre_est_en_toi dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 29/12/2006, 19h38

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