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