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

avec Java Discussion :

Ne plus passer par Date


Sujet :

avec Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 66
    Points : 38
    Points
    38
    Par défaut
    Bonjour,
    J'ai un petit souci car j'ai crée une classe Date où je saisis un jour un mois et une année et cette classe je l'appelle à plusieurs dans le programme que je fais. Et le compilateur n'arrête pas de me dire que cet appel avec DATE est deprecated... Donc après quelques recherches, j'ai trouvé que le mieux était de passer par Gregoriancalendar. Mais le souci c'est que je ne vois pas comment adapter mon programme pour que l'utilisateur puisse saisir les données jour mois année au clavier et ensuite que ca marche avec Gregoriancalendar.

    Voici ce que j'ai fais pour la date du moment :

    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
    import java.util.GregorianCalendar;
       import java.text.*;
       import java.util.Date;
       import java.util.*; 
    public class Calendar {
     
     public Calendar() {} 
     
    public static java.util.Date aujourdhui(){
     
         GregorianCalendar maintenant = new GregorianCalendar();
         DateFormat dateFormat = new SimpleDateFormat("dd/mm/yyyy");
     
        return maintenant.getTime();
     
    	}
     
    public static void main(String args[]){
     
    	System.out.println(aujourdhui());
     
    }
     
    }
    Cette méthode ne me renvoit que la date. Mais je voudrais que ce soit l'utilisateur qui saisisse les jour,mois,année pour pouvoir appeler cette méthode à tout moment.

    Merci d'avance. Désolé pour la lecture.

    Il va falloir se servir des get pour saisir la date non ? Merci d'avance car là ça m'embete ce blocage...

  2. #2
    Expert éminent
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Points : 7 679
    Points
    7 679
    Par défaut
    Salut,
    Tu bloques sur comment utiliser Calendar ou comment convertir une chaine en une date ?

    Pour le calendar, voici un exemple rapide : http://java.developpez.com/faq/java/...rifierValidite
    Pour la conversion : http://java.developpez.com/faq/java/...G_parse_string

    Ou est ce autre chose ?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 66
    Points : 38
    Points
    38
    Par défaut
    Tout d'abord merci pour votre réponse. En fait je ne vois pas comment passer ma saisie des jours, mois, années (saisie clavier) à ma fonction calendar.

  4. #4
    Expert éminent
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Points : 7 679
    Points
    7 679
    Par défaut
    Le second lien te permet de transformer directement une chaine saisie (sous le format que tu précises) en java.util.Date, avec les jours, mois et années correctement renseignés.

    Je ne vois donc pas ce que tu cherches à faire ?

    Sinon, pour l'utilisation de l'onjet Calendar en général, je t'invite à consulter sa JavaDoc : http://javasearch.developpez.com/j2s.../Calendar.html

    C'est assez simple à utiliser.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 66
    Points : 38
    Points
    38
    Par défaut
    En effet je vais regarder tout ca et surtout tester. Je vous tiens au courant si ca marche.

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 66
    Points : 38
    Points
    38
    Par défaut
    Bonsoir,
    Voici la classe que j'ai faite et j'ai un petit bug :

    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
    public class Calendar {
    	private static int jour;
    	private static int mois;
    	private static int annee;
     
    	public void Saisir(){
     
    		System.out.println("Veuillez saisir la date du jour ");
    		jour = Keyboard.readInt();
    		mois = Keyboard.readInt();
    		annee = Keyboard.readInt();
     
    	}
    	public static boolean estValide(int annee, int mois, int jour){
    		Calendar c = Calendar.getInstance();
    		c.setLenient(false);
    		c.set(annee,mois,jour);        
    		try{
    		  c.getTime();  
    		}
    		catch(IllegalArgumentException iAE){
    		  return false;
    		}
     
    		return true;
    	}
     
    	private void getTime() {
    		// TODO Auto-generated method stub
     
    	}
    	private void set(int annee2, int mois2, int jour2) {
    		// TODO Auto-generated method stub
     
    	}
    	private void setLenient(boolean b) {
    		// TODO Auto-generated method stub
     
    	}
    	private static Calendar getInstance() {
    		// TODO Auto-generated method stub
    		return null;
    	}
    	/**
             * @param args
             */
    	public static void main(String[] args) {
     
    		System.out.println(estValide(annee,mois,jour));
     
    	}
     
    }
    Je n'ai pas très bien compris ce qu'il faut mettre dans getInstance() pour que ca marche. Merci d'avance.

  7. #7
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Et c'est quoi l'erreur ???

    parceque déjà, j'ai du manquer qqchose mais les variables ne sont initialisées dans l'appel à estValid
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 66
    Points : 38
    Points
    38
    Par défaut
    C'est :
    Exception in thread "main" java.lang.NullPointerException
    at Calendar.estValide(Calendar.java:19)
    at Calendar.main(Calendar.java:52)

    Merci pour votre aide. Pour les variables il faut que je fasse appel à la méthode Saisir dans le main déjà non ?

  9. #9
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Ta classe se nomme Calendar
    Tu définis une méthode getInstance() qui renvoie NULL
    Ta méthode estValide(...) commence par Calendar.getInstance()

    Rien d'étonnant qu'il fasse NullPointerException

    Tu devrais remplacer Calendar.getInstance() par java.util.Calendar.getInstance() (idem pour la variable associée)
    ou plus simple, renommer ta classe Calendar en MonCalendar pour éviter ce genre d'erreur
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  10. #10
    Membre actif Avatar de g0up1l
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 341
    Points : 294
    Points
    294
    Par défaut
    Citation Envoyé par Eclipse39 Voir le message
    C'est :
    Exception in thread "main" java.lang.NullPointerException
    at Calendar.estValide(Calendar.java:19)
    at Calendar.main(Calendar.java:52)

    Merci pour votre aide. Pour les variables il faut que je fasse appel à la méthode Saisir dans le main déjà non ?
    Oui, si je ne m'abuse, ton pgm ne passe jamais par la fonction "Saisir(...)" !
    Il faut donc commencer par là avant d'appeler "estValide(...)".
    Par contre, méfie-toi, ta fonction "Saisir" n'est pas déclarée "static"...
    Hope it helps !
    Nouveau ! Il y a une vie après le java, oxygénez-vous

  11. #11
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mexique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 328
    Points : 459
    Points
    459
    Par défaut GregorianCalendar
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
         GregorianCalendar maintenant = new GregorianCalendar();
    ...() sans paramètres te donne la date du jour... à condition derrière d'en extraire le contenu.

    exemple:

    int annee = maintenant.get(GregorianCalendar.YEAR);
    int num_mois = maintenant.get(GregorianCalendar.MONTH); // retourne 0>>11
    int num_jour = maintenant.get(GregorianCalendar.DAY_OF_MONTH); // 1>>31

    Donc pour aujourd'hui 29/11/2008:

    annee = 2008
    num_mois = 10 c'est à l'utilisateur de faire +1
    num_jour = 29

    Si tu n'as besoin que de la date du jour, tu n'as même pas besoin d'entrer la date.

    ...(p1, p2, p3) avec paramètres p1 = année, p2 = mois -1 (10 pour le mois11) et p3 = jour. Comme tu le sais les paramètres dont de type int.

    Et comme pour la date du jour (sans param.), tu dois faire tes get.(Greg... et
    pour obtenir quoi ? ce que tu as déjà par l'intro clavier (sauf pour le mois -1)

    .setLenient(false); il y aura un contrôle des valeurs entrées,par exemple si p3 = 31 et que le mois est un mois de 30 jour, il y aura une exception.
    catch (Exception e), mais UNIQUEMENT À LA LECTURE, pas à l'entrée.

    Par contre, avec .setLenient(true); qui est la valeur par défaut, c'est accepté mais le jour passerait à 1 et le mois au num. de mois au num. de mois suivant. On ferait donc évoluer la date de 1 jour, et ce n'est pas par indulgence (lenient), mais pour permettre de faire des calculs sur les dates.

    À toi de voir l'utilité d'utiliser GregorianCalendar (ou Calendar) pour ce programme ou non.

    Cordialement,

    Dan

    Edit : saisie de la suite de ce message après son envoi par mégarde avant qu'il soit terminé...

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 66
    Points : 38
    Points
    38
    Par défaut
    Merci beaucoup à tous pour vos réponses. En fait au lieu de demander à la personne plusieurs fois de saisir une date 5plusieurs dates) je voudrais réutiliser cette méthode et ainsi l'appeler plusieurs fois dans mon programme principal. J'ai encore une question car je voudrais faire appel à cette méthode et que l'utilisateur saisisse une date à chaque fois avec comme je l'ai marqué :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    System.out.println("Veuillez saisir une date");
    		jour = Keyboard.readInt();
    		mois = Keyboard.readInt();
    		annee = Keyboard.readInt();
    Donc pour cela je vais faire une classe date avec une méthode saisir comme celà :

    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
    public class date {
    	public static int jour;
    	public static int mois;
    	public static int annee;
     
    	public static void Saisir(){
     
    		System.out.println("Veuillez saisir la date du jour ");
    		jour = Keyboard.readInt();
    		mois = Keyboard.readInt();
    		annee = Keyboard.readInt();
                 annee = maintenant.get(GregorianCalendar.YEAR);
                 mois = maintenant.get(GregorianCalendar.MONTH); 
                 jour = maintenant.get(GregorianCalendar.DAY_OF_MONTH); 
     
         GregorianCalendar test = new GregorianCalendar(annee,mois,jour)
     
     
    	}
    }
    Est ce correct ? Merci beaucoup.

  13. #13
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mexique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 328
    Points : 459
    Points
    459
    Par défaut
    Citation Envoyé par Eclipse39 Voir le message
    Merci beaucoup à tous pour vos réponses. En fait au lieu de demander à la personne plusieurs fois de saisir une date 5plusieurs dates) je voudrais réutiliser cette méthode et ainsi l'appeler plusieurs fois dans mon programme principal. J'ai encore une question car je voudrais faire appel à cette méthode et que l'utilisateur saisisse une date à chaque fois avec comme je l'ai marqué :

    [/CODE]
    Donc pour cela je vais faire une classe date avec une méthode saisir comme celà :

    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
    public class date {
    	public static int jour;
    	public static int mois;
    	public static int annee;
     
    	public static void Saisir(){
     
    		System.out.println("Veuillez saisir la date du jour ");
    		jour = Keyboard.readInt();
    		mois = Keyboard.readInt();
    		annee = Keyboard.readInt();
                 annee = maintenant.get(GregorianCalendar.YEAR);
                 mois = maintenant.get(GregorianCalendar.MONTH); 
                 jour = maintenant.get(GregorianCalendar.DAY_OF_MONTH); 
     
         GregorianCalendar test = new GregorianCalendar(annee,mois,jour)
     
     
    	}
    }
    Est ce correct ? Merci beaucoup.

    Pas tout à fait et en supposant que la classe Keyboard et sa méthode readInt() que nous n'avons pas sont correctes:

    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
    // les imports dont 
                 import java.util.GregorianCalendar;
     
                 public class UneDate {
    	public static int jour;
    	public static int mois;
    	public static int annee;
     
    	public static String saisir(){ // pas void puisque tu retournes
     
    		System.out.println("Veuillez saisir une date ");
    		jour = Keyboard.readInt();
    		mois = Keyboard.readInt();
    		annee = Keyboard.readInt();
    // Avant de récuperer annee, mois et jour, il faut les fournir à GregorianCalendar
                 try
                 {
    // En fait ici tu utilises GregoriaCalendar pou contrôler la validité de la date
                 GregorianCalendar test = new GregorianCalendar(annee,mois -1,jour);
                 test.setLenient(false);
                 annee = test.get(GregorianCalendar.YEAR);
                 mois = test.get(GregorianCalendar.MONTH); 
                 jour = test.get(GregorianCalendar.DAY_OF_MONTH);           
                   }       
                       catch (Exception e)
                      {
                         ..............;
                         .............;
                      }
    // c'est ok, on fabrique ce que l'on veut retourner
    // exemple jj/mm/aa ou aaaa
     //jour++; <<<<<<<< gros lapsus de ma part !!!
    mois++; <<<<<<<< puisqu'il y a retour du n° de mois -1 (0 à 11)
     String jj = Integer.toString(jour);
     String mm = Integer.toString(mois);
     String aaaa = Integer.toString(annee);
     
    return = jj + "/" + mm + "/" + aaaa;
     
         }
     
     
    }
    Comment appeler cette methode depuis ton programme principal ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String retour = UneDate.saisir()
    Les données retournées sont dans retour et tu en disposes comme tu veux.

    Cordialement,

    Dan

    Edit : remplacement de jour++ par mois++

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 66
    Points : 38
    Points
    38
    Par défaut
    Merci beaucoup Dan. Bon Dimanche à tous.

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 66
    Points : 38
    Points
    38
    Par défaut
    Désolé de Remonter ce post mais j'ai une petite question :
    Pour redemander une saisie à l'utilisateurs si la date est non valide dans le catch est ce possible ?
    Merci d'avance pour votre réponse.

  16. #16
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mexique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 328
    Points : 459
    Points
    459
    Par défaut
    Citation Envoyé par Eclipse39 Voir le message
    Désolé de Remonter ce post mais j'ai une petite question :
    Pour redemander une saisie à l'utilisateurs si la date est non valide dans le catch est ce possible ?
    Merci d'avance pour votre réponse.
    Quelque chose comme :

    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
    // les imports dont 
       import java.util.GregorianCalendar;
     
        public class UneDate
       {
          public static int jour;
          public static int mois;
          public static int annee;
     
           public static String saisir()  // pas void puisque tu retournes
          {
             boolean boucle = true;
     
             System.out.println("Veuillez saisir une date ");
     
             while ( boucle(true) )
             {
                boucle = false;
                jour = Keyboard.readInt();
                mois = Keyboard.readInt();
                annee = Keyboard.readInt();
             // Avant de récuperer annee, mois et jour, il faut les fournir à GregorianCalendar
                try
                {
                // En fait ici tu utilises GregoriaCalendar pou contrôler la validité de la date
                   GregorianCalendar test = new GregorianCalendar(annee,mois -1,jour);
                   test.setLenient(false);
                   annee = test.get(GregorianCalendar.YEAR);
                   mois = test.get(GregorianCalendar.MONTH); 
                   jour = test.get(GregorianCalendar.DAY_OF_MONTH);           
                }       
                    catch (Exception e)
                   {
                   // ton message d'érreur +
                      boucle = true;
                      System.out.println("Veuillez saisir de nouveau votre date ");
                   }
             }
     
          // c'est ok, on fabrique ce que l'on veut retourner
     
             mois++;   //<<<<<<<< puisqu'il y a retour du n° de mois -1 (0 à 11)
             String jj = Integer.toString(jour);
             String mm = Integer.toString(mois);
             String aaaa = Integer.toString(annee);
     
             return (jj + "/" + mm + "/" + aaaa);
     
          }
       }

  17. #17
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 66
    Points : 38
    Points
    38
    Par défaut
    Oh merci beaucoup. C'est vrai que je suis bete de n'avoir pas pensé à mettre une boucle. Merci beaucoup.
    Petite précision : c'est while (boucle==true).
    Une dernière petite question : pourquoi on met mois-1 car ca mache aussi si l'on met mois tout court sans mettre mois++?
    Bonne soirée.

  18. #18
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mexique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 328
    Points : 459
    Points
    459
    Par défaut
    Citation Envoyé par Eclipse39 Voir le message
    Oh merci beaucoup. C'est vrai que je suis bete de n'avoir pas pensé à mettre une boucle. Merci beaucoup.
    Petite précision : c'est while (boucle==true).
    Une dernière petite question : pourquoi on met mois-1 car ca mache aussi si l'on met mois tout court sans mettre mois++?
    Bonne soirée.
    désolé !

    on peut également écrire while (boucle) // true par défaut

    Pour me faire pardonner je te donne ceci pour forcer éventuellement un zéro à gauche du jour ou 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
     
          // c'est ok, on fabrique ce que l'on veut retourner
     
             mois++;   //<<<<<<<< puisqu'il y a retour du n° de mois -1 (0 à 11)
             String jj = Integer.toString(jour);
             String mm = Integer.toString(mois);
             String aaaa = Integer.toString(annee);
     
          	// forcer 1 zéro à gauche si jour ou mois < 10
             jj = (jour<10?"0":"") + jour;
             mm = (mois<10?"0":"") + mois;
     
             return (jj + "/" + mm + "/" + aaaa);
    Cordialement,

    Dan

  19. #19
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Une dernière petite question : pourquoi on met mois-1 car ca mache aussi si l'on met mois tout court sans mettre mois++?
    Parceque il y a comme expliqué dans le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mois = test.get(GregorianCalendar.MONTH);
    donc mois++
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  20. #20
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mexique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 328
    Points : 459
    Points
    459
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GregorianCalendar test = new GregorianCalendar(annee,mois -1,jour);
    Ce qu'attend Gregorian... c'est :
    pour le jour un numéro de jour 1 à 28 ou 29 pour février,
    1 à 30 ou 31 pour les autres mois,
    pour le mois un numéro du mois de 0 (janvier) à 11 (décembre),
    pour l'année un int quelconque.

    Si on entre par exemple 1 puis 12 puis 2008 donc 12 pour décembre (ceci est un exemple qui n'est pas choisi au hazard),
    on doit initialiser la date comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GregorianCalendar test = new GregorianCalendar(2008, 11, 1);
    SANS
    si on met 12 pour le paramètre mois, c'est bien entendu accepté,
    mais c'est comme si on faisait une addition de 1 sur le mois et,
    au get du mois, on récupère 0 soit janvier, mais aussi 2009 pour l'année,(dans cet exemple le jour est inchangé et reste à 1).

    par contre AVEC
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    test.setLenient(false);
    il y a exception puisque on dépasse la valeur limite maxi du mois qui est 11.
    Ceci pour l'entrée des paramètres.

    De la même manière, à la lecture (avec ou sans setLenient)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mois = test.get(GregorianCalendar.MONTH);
    pour décembre celà donne 11 d'où la nécessité de faire ++ avant d'envoyer le résultat.

    Si ce n'est pas clair, n'hésites pas.

    Cordialement et bonne année à tous.

    Dan

Discussions similaires

  1. [XL-2010] Ajout heure sans passer par certaines dates
    Par gabvoir dans le forum Excel
    Réponses: 3
    Dernier message: 07/08/2013, 20h09
  2. Réponses: 5
    Dernier message: 10/11/2011, 08h58
  3. Regroupement par date la plus récente
    Par pbt1983 dans le forum Requêtes
    Réponses: 3
    Dernier message: 22/11/2009, 20h10
  4. Répartition par Date - comment le faire plus intelligemment
    Par tavarlindar dans le forum Requêtes
    Réponses: 10
    Dernier message: 12/02/2007, 14h31
  5. [Kylix] Débrider Kylix sans passer par le Net
    Par BXDSPORT dans le forum EDI
    Réponses: 1
    Dernier message: 23/03/2003, 10h52

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