Valider une date

Valider une date - Java - Programmation

Marsh Posté le 21-09-2004 à 15:25:25    

Java commence à me courrir sur le haricot !
 
Bon, soit je suis neuneu (pas impossible) soit faut faire une putain de gymnastique pour valider une date à partir d'entrées comme Année, Mois, Jour.
 
Précision, java 1.3...
 
Y'a bien la soluce de construire une chaîne genre dd/MM/yyyy avec les entrées et de parser, mais :
- parse est deprecated :ange:
- Date est vachement limité en terme de limites mini maxi, re :ange:
 
 
Bref on nous dis dans la doc qu'il faut utiliser DateFormat ou Calendar.
 
Ni l'un ni l'autre ne sont très clair quand à ce qui se passe si une date n'est pas valide.
 
Ma solution actuelle est la suivante :
 
Construire un GregorianCalendar avec nYear, nMonth-1  :sarcastic: et nDay et ensuite de vérifier que get( GregorianCalendar.YEAR ) == nYear et idem pour nMonth-1 et nDay :sweat:
 
TROP NAZE !
 
Pourquoi faire simple quand on peut faire la Java :o


Message édité par Mara's dad le 21-09-2004 à 15:26:38

---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 21-09-2004 à 15:25:25   

Reply

Marsh Posté le 21-09-2004 à 15:28:20    

Reply

Marsh Posté le 21-09-2004 à 15:35:04    


Code :
  1. import java.text.ParseException;
  2. import java.text.SimpleDateFormat;
  3. import java.util.Date;
  4. public class ValideDate {
  5. public static void main(String[] args) {
  6.  SimpleDateFormat df = new SimpleDateFormat("dd/MM/YYYY" );
  7.  int year = 2004;
  8.  int month = 9;
  9.  int day = 33;
  10.  boolean ok;
  11.  try {
  12.   Date d = df.parse(day + "/" + month + "/" + year);
  13.   ok = true;
  14.  } catch (ParseException e) {
  15.   ok = false;
  16.  }
  17.  System.err.println("date ok ? " + ok);
  18. }
  19. }


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 21-09-2004 à 15:45:09    

c'est bon fred ?


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 21-09-2004 à 15:56:43    

Non !
 

Code :
  1. Date d;
  2. SimpleDateFormat sdf = new SimpleDateFormat( "dd/MM/yyy" );
  3. try
  4. {
  5. Date d = sdf.parse( "30/02/2004" );
  6. }
  7. catch( ParseException e )
  8. {
  9. e.printStackTrace(  );
  10. }


 
Résultat : d = 01/03/2004 !
 
Alors qu'avec 33/02/2004 j'ai une ParseException :pt1cable:
Idem avec 30/09/0504 (La limite dont je parlais plus haut...)
 
C'est language de bourrrrrrrrrrrrrrrrrins ou faut tout faire sois-même c'est tout !
 


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 21-09-2004 à 16:00:15    

Conclusion :
 

public static boolean checkDate( int year, int month, int day )
{
    GregorianCalendar gc = new GregorianCalendar( year, month - 1, day );
    return( gc.get( GregorianCalendar.YEAR ) == year && gc.get( GregorianCalendar.MONTH ) == ( month - 1 ) && gc.get( GregorianCalendar.DAY_OF_MONTH ) == day );
}


 
Admirez le "month - 1" au passage :D


Message édité par Mara's dad le 21-09-2004 à 16:01:19

---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 21-09-2004 à 17:18:42    

Mara's dad a écrit :

Non !
 

Code :
  1. Date d;
  2. SimpleDateFormat sdf = new SimpleDateFormat( "dd/MM/yyy" );
  3. try
  4. {
  5. Date d = sdf.parse( "30/02/2004" );
  6. }
  7. catch( ParseException e )
  8. {
  9. e.printStackTrace(  );
  10. }


 
Résultat : d = 01/03/2004 !
 
Alors qu'avec 33/02/2004 j'ai une ParseException :pt1cable:
Idem avec 30/09/0504 (La limite dont je parlais plus haut...)
 
C'est language de bourrrrrrrrrrrrrrrrrins ou faut tout faire sois-même c'est tout !


Code :
  1. sdf.setLenient(false);


Message édité par sircam le 21-09-2004 à 17:19:04

---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 21-09-2004 à 17:24:05    

suffit de fixer le lenient à false :  
 

Code :
  1. import java.text.ParseException;
  2. import java.text.SimpleDateFormat;
  3. import java.util.Date;
  4. public class ValideDate {
  5. public static void main(String[] args) {
  6.  SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy" );
  7.  df.setLenient(false);
  8.  try {
  9.   Date d = df.parse("30/02/2004" );
  10.   System.out.println("date : " + df.format(d));
  11.  } catch (ParseException e) {
  12.   System.err.println("error : " + e.getMessage());
  13.  }
  14. }
  15. }


 
edit : [:benou_grilled]


Message édité par benou le 21-09-2004 à 17:25:34

---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 21-09-2004 à 17:25:20    

benou a écrit :

suffit de fixer le lenient à true  :  


dit il en le mettant a false

Reply

Marsh Posté le 21-09-2004 à 17:26:05    

lorill a écrit :

dit il en le mettant a false


corriged :o


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 21-09-2004 à 17:26:05   

Reply

Marsh Posté le 21-09-2004 à 17:30:01    

trop tard  :ange:

Reply

Marsh Posté le 21-09-2004 à 17:30:53    

lorill a écrit :

trop tard  :ange:


m'fous :o


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 21-09-2004 à 17:37:05    

il a le choix dans la date ?

Reply

Marsh Posté le 21-09-2004 à 18:32:16    

ha merde, lenient [:bien]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 21-09-2004 à 19:39:33    


Vu le nombre d'emmerdes que ce truc crée, j'me d'mande encore pourquoi il est à true par défaut :D


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 21-09-2004 à 23:23:28    

Ok merçi à tous, j'avais pas vu setLenient() :jap:
 
J'avais juste vu isLenient() dont je n'avais pas bien compris la signification...
 
 :fou: Je suis un neuneu !


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 21-09-2004 à 23:36:34    

Mara's dad a écrit :


 :fou: Je suis un neuneu !


 
Si tu n'arrives pas à faire ce genre de choses en java, c'est une bonne raison :o
 
( [:joce] )


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 21-09-2004 à 23:53:59    

Bah, j'ai que 6 mois d'expérience en java.
Vu la taille de l'api, je ne suis pas étonné de n'en avoir qu'égratigné la surface.
Y'a l'age aussi :sweat: Mes neurones ne sont plus aussi alertes qu'il y a 25 ans :sarcastic:


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 22-09-2004 à 00:12:06    

hey papy, 'faut pas laisser trainer votre déambulateur dans le milieu du chemin ! merci. :o

Reply

Marsh Posté le 22-09-2004 à 10:18:08    

Désolé :o


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed