Date format jj/mm/aaaa

Bonsoir,
j ss debutant d la programmation (java) je vx savoir s'il existe une method en java pour obliger l utilisateur a saisir une date sous cett format jj/mm/aaaa
merci d'avance
Configuration: Windows XP Internet Explorer 6.0

4 réponses

  • Votes
  • Date
  • Date décroissante
  1. Salut,

    >>>> fiddy:
    Bien entendu que SimpleDateFormat retournera une date de format dd/jj/aaaa, et contrôlera même que jj mm aaaa sont numériques, et forcera les éventuels zéros à guauche , mais si l'utilisateur ne respecte pas ce format malgré System.out.print("date (dd/mm/yyyy): ");
    Exemple j'entre 1/5/9, je récupère 01/05/0009 sans obligation de saisir de nouveau. Et ceci sans parler de contrôle de validité de la date puisque celà doit être traité plus loin, ce que je vais faire maintenant sans attendre la réponse de nouna002:

    >>>> nouna002:

    ne pas oublier:
    import java.util.GregorianCalendar;
    et pour les messages d'erreur:
    import java.awt.Toolkit;
    mport javax.swing.JOptionPane;
    ----
    ----

    le code toujours en simulation de saisie:

    // il faudra que tu me dises ce que tu utilises pour l'entrée clavier
    // Pour l'instant je suppose que ce sera dans un String saisie

    // Mois j'utilise les boite de dialogue

    // nous aurons besoin de:

    //static JOptionPane erreur; // ajout mais au niveau class (globale)
    String info = ""; // ajout
    boolean cntValidDate = false; // ajout

    String saisie = "";
    int longueurSaisie = 0;
    int deuxOuQuat = 2; // pour lg jj et mm
    boolean encore = true;
    String jjS = "";
    String mmS = "";
    String aaaaS = "";

    // supposons qu'on saisira pour la date 01/05/2009:

    // d'abord jj:
    System.out.println("\nEntrer le jour sur 2 caracteres\n");
    saisie = "29"; // simulation // "1"
    jjS = saisie;
    String entrer = "jj";
    String libLg = Integer.toString(deuxOuQuat);

    while(encore)
    {
    encore = false; // sera force a true si err de lg
    longueurSaisie = saisie.length();
    if (longueurSaisie != deuxOuQuat)
    {
    encore = true;
    //System.out.println("\nsaisie = " + "\"" + saisie + "\"" + ":\n"
    info = "\nsaisie = " + "\"" + saisie + "\"" + ":\n"
    + "-la longueur de " + entrer + " est incorrecte\n"
    + "-on devrait avoir " + libLg + "!\n"
    + "ENTRER " + entrer + " DE NOUVEAU.";
    Toolkit.getDefaultToolkit().beep();
    erreur.showMessageDialog(null, info + "\n","ERREUR",JOptionPane.ERROR_MESSAGE);

    if (entrer.equals("jj"))
    {
    saisie = "28"; // simulation "01"
    jjS = saisie;
    }
    else
    if (entrer.equals("mm"))
    {
    saisie = "02"; // simulation "05"
    mmS = saisie;
    }
    else
    {
    saisie = "2009";
    aaaaS = saisie;
    }
    }
    else // si la longueur est bonne
    {
    if (entrer.equals("jj"))
    {
    System.out.println("\njj = " + "\"" + jjS + "\"\n");
    // ensuite mm:
    System.out.println("Entrer le mois sur 2 caracteres\n");
    saisie = "2"; // simulation "5"
    mmS = saisie;
    entrer = "mm";
    libLg = Integer.toString(deuxOuQuat);
    encore = true;
    }
    else
    if (entrer.equals("mm"))
    {
    System.out.println("\nmm = " + "\"" + mmS + "\"\n");
    // enfin aaaa:
    System.out.println("Entrer l'annee sur 4 caracteres\n");
    saisie = "09"; // simulation
    aaaaS = saisie;
    entrer = "aaaa";
    deuxOuQuat = 4;
    libLg = Integer.toString(deuxOuQuat);
    encore = true;
    }
    else
    if (entrer.equals("aaaa"))
    {
    System.out.println("\naaaa = " + "\"" + aaaaS + "\"\n");
    encore = false;
    cntValidDate = true;
    }
    }

    // ici on a incorpore le controle de validite de la date
    // et remarquer qu'on a ajoute boolean cntValidDate = falsee;
    // au début apres boolean encore = true;
    // il faut aussi import java.util.GregorianCalendar;

    if (cntValidDate)
    {
    int p1 = Integer.parseInt(aaaaS);
    int p2 = Integer.parseInt(mmS);
    p2--; // car nous devons fournir le n° de mois -1
    int p3 = Integer.parseInt(jjS);

    try
    {
    GregorianCalendar gc = new GregorianCalendar(p1, p2, p3);
    gc.setLenient(false); // sans cette ligne, pas d'exception possible
    // (true par defaut)
    gc.getTime(); // c'est cette ligne qui provoquera le contrôle.

    }
    catch (Exception e) {
    e.printStackTrace();
    encore = true;
    info = "\nLa date obtenue " + jjS + "/" + mmS + "/" + aaaaS
    + "est invalide:\nEntrer de nouveau le jour sur 2 caracteres\n";
    //System.out.println("\nLa date obtenue " + jjS + "/" + mmS + "/" + aaaaS
    // + " est invalide, entrer de nouveau le jour sur 2 caracteres\n");

    Toolkit.getDefaultToolkit().beep();
    erreur.showMessageDialog(null, info + "\n","ERREUR",JOptionPane.ERROR_MESSAGE);

    //javax.swing.JOptionPane.showMessageDialog(null,info);
    saisie = "1"; // simulation
    deuxOuQuat = 2;
    jjS = saisie;
    entrer = "jj";
    libLg = Integer.toString(deuxOuQuat);
    cntValidDate = false;
    }
    }
    }
    String dateEntree = jjS + "/" + mmS + "/" + aaaaS;
    javax.swing.JOptionPane.showMessageDialog(null,"Résultat :" +dateEntree);

    Cordialement,

    Dan
    1. Salut,

      J'ai un code:

      // LE MIEUX SERAIT DE DEMANDER LA DATE EN 3 FOIS:
      // jj et on ajoute / apres avoir vérifié que la longueur est 2
      // mm et on ajoute / " " " "
      // aaaa et on vérifie que la longueur est 4

      // il faudra que tu me dises ce que tu utilises pour l'entrée clavier
      // Pour l'instant je suppose que ce sera dans un String saisie

      // nous aurons besoin de:

      String saisie = "";
      int longueurSaisie = 0;
      int deuxOuQuat = 2; // pour lg jj et mm
      boolean encore = true;
      String jjS = "";
      String mmS = "";
      String aaaaS = "";

      // supposons qu'on saisira pour la date 01/05/2009:

      // d'abord jj:
      System.out.println("\nEntrer le jour sur 2 caracteres\n");
      saisie = "1"; // simulation
      jjS = saisie;
      String entrer = "jj";
      String libLg = Integer.toString(deuxOuQuat);

      while(encore)
      {
      encore = false; // sera force a true si err de lg
      longueurSaisie = saisie.length();
      if (longueurSaisie != deuxOuQuat)
      {
      encore = true;
      System.out.println("\nsaisie = " + "\"" + saisie + "\"" + ":\n"
      + "-la longueur de " + entrer + " est incorrecte\n"
      + "-on devrait avoir " + libLg + "!\n"
      + "ENTRER " + entrer + " DE NOUVEAU.");
      if (entrer.equals("jj"))
      {
      saisie = "01"; // simulation
      jjS = saisie;
      }
      else
      if (entrer.equals("mm"))
      {
      saisie = "05"; // simulation
      mmS = saisie;
      }
      else
      {
      saisie = "2009";
      aaaaS = saisie;
      }
      }
      else // si la longueur est bonne
      {
      if (entrer.equals("jj"))
      {
      System.out.println("\njj = " + "\"" + jjS + "\"\n");
      // ensuite mm:
      System.out.println("Entrer le mois sur 2 caracteres\n");
      saisie = "5"; // simulation
      mmS = saisie;
      entrer = "mm";
      libLg = Integer.toString(deuxOuQuat);
      encore = true;
      }
      else
      if (entrer.equals("mm"))
      {
      System.out.println("\nmm = " + "\"" + mmS + "\"\n");
      // enfin aaaa:
      System.out.println("Entrer l'annee sur 4 caracteres\n");
      saisie = "09"; // simulation
      aaaaS = saisie;
      entrer = "aaaa";
      deuxOuQuat = 4;
      libLg = Integer.toString(deuxOuQuat);
      encore = true;
      }
      else
      if (entrer.equals("aaaa"))
      {
      System.out.println("\naaaa = " + "\"" + aaaaS + "\"\n");
      encore = false;
      }
      }
      }
      String dateEntree = jjS + "/" + mmS + "/" + aaaaS;
      System.out.println("\nLa date entree est: " + dateEntree + "\n\n");

      // Il reste a controler si la date est valide (jj en fonction de mm
      // et des annees bisextiles, mm dans les limites 01 a 12...)
      // on peut le faire en utilisant Calendar ou GregorianCalendar
      // si tu es interresse, je t'indiquerai comment faire.

      Cordialement,

      Dan
      1. Contributeur
        Salut,
        Et Java inventa la méthode parse de DateFormat ^^.
      2. c'est quoi le janvier?
    2. Contributeur
      Salut,
      Voici un exemple :
      import java.util.Scanner;
      import java.util.Date;
      import java.text.DateFormat;
      import java.text.ParseException;
      import java.text.SimpleDateFormat;
      
      public class TestDate {
          static DateFormat format=new SimpleDateFormat("dd/mm/yyyy");
      
          public static void main(String args[]) {
              Scanner scan=new Scanner(System.in);
              Date date=null;
              while (date==null) {
                  System.out.print("date (dd/mm/yyyy): ");
                  String entree=scan.next();
      
                  try {
                      date=format.parse(entree);
                  } catch (ParseException e) {
                      System.out.println("erreur saisie date");
                  }
              }
              System.out.println("date: " + format.format(date));
          }
      }
      
      
      1. Attention ce n'est pas "dd/mm/yyyy" mais "dd/MM/yyyy" avec un "M" majuscule pour le mois, sinon ce sont les minutes !!!
      2. je ne comprend rien!