Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3163 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [RESOLU][java] transformer un champ String en date

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[RESOLU][java] transformer un champ String en date

n°1417913
jerhom
Posté le 02-08-2006 à 09:23:36  profilanswer
 

Bonjour tout le monde !
 
Je pense que c'est une question redondante, et je m'en excuse par avance :
 
J'ai un champ String qui est censé être au format "JJ-MM-AAAA". Je souhaite vérifier que ce champ est une date. Est-ce que je vérifie caractère par caractère ou y a-t-il une façon plus élégante de le faire ?
 
Merci d'avoir lu mon post.
 
Jerhom
 
/edit : j'ai trouvé la réponse à ma question dans les posts ci-dessous. Encore merci. :)


Message édité par jerhom le 02-08-2006 à 16:34:42
mood
Publicité
Posté le 02-08-2006 à 09:23:36  profilanswer
 

n°1417918
_darkalt3_
Proctopathe
Posté le 02-08-2006 à 09:29:24  profilanswer
 

Bien vu, y a une fonction recherche, "java string date" en parametre de donnera ce que tu veux savoir.
 
Bienvenue sur le forum :jap:


Message édité par _darkalt3_ le 02-08-2006 à 09:29:50
n°1417926
brasseld
Posté le 02-08-2006 à 09:38:47  profilanswer
 

Code :
  1. public void isDateValid(String jDate) throws ParseException{
  2.         DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy" );
  3. dateFormat.parse(jDate);
  4. }


Si ça renvoie pas d'exception -> alors c'est que jDate est une date valide.

Message cité 1 fois
Message édité par brasseld le 02-08-2006 à 10:22:02
n°1417958
jerhom
Posté le 02-08-2006 à 10:20:42  profilanswer
 

brasseld a écrit :

Code :
  1. public void isDateValid(String jDate) throw ParseException{
  2.         DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy" );
  3. dateFormat.parse(jDate);
  4. }


Si ça renvoie pas d'exception -> alors c'est que jDate est une date valide.


 
 
C'est vraiment sympa d'avoir répondu et c'est exactement ce que je cherchais.  
mici, mici, mici, mici, mici, mici, mici, mici, mici, mici, mici, mici, mici, mici, mici,  :jap:  
 
Jerhom

n°1418036
jerhom
Posté le 02-08-2006 à 11:38:43  profilanswer
 

Fausse joie  :??:  
 
Si je passe 01-32-20011 comme String, ça ne provoque pas d'erreur. Or il ne s'agit pas d'une date. Est-ce que qq1 peut me préciser si j'ai merdouillé qq part ?
 

n°1418045
souk
Tourist
Posté le 02-08-2006 à 11:52:09  profilanswer
 

c'est normal, va donc faire un tour sur la javadoc ....

n°1418051
jerhom
Posté le 02-08-2006 à 12:06:46  profilanswer
 

souk a écrit :

c'est normal, va donc faire un tour sur la javadoc ....


Est-ce que tu peux être plus précis, STP ? J'ai encore un peu de mal avec l'anglais. Si je mets yyyy ça ne vérifie pas que mon année est sur 4 digits ? ou si je mets MM ça ne vérifie pas qu'il n'y a pas plus de 12 mois par an ?

n°1418073
brasseld
Posté le 02-08-2006 à 13:20:16  profilanswer
 

Tiens c'est fait à l'arrache mais ça fonctionne... mais il faut chercher de temps en temps...

Code :
  1. public static boolean estDateValide(String date) {
  2.     try {
  3.      DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy" );
  4.      dateFormat.parse(jDate);
  5.     }
  6. catch(ParseException pe) {
  7. return false;
  8. }
  9. //Ici c'est pas terrible pour récupérer les jour, mois et année.. cherche autre chose
  10.  int jj = 0, mm = 0, aaaa = 0;
  11.  try {
  12.   jj = Integer.parseInt(date.substring(0, 2));
  13.   mm = Integer.parseInt(date.substring(3, 5));
  14.   aaaa = Integer.parseInt(date.substring(6, 10));
  15.  } catch(IndexOutOfBoundsException soobe) {
  16.   return false;
  17.  } catch(NumberFormatException nfe) {
  18.   return false;
  19.  }
  20.  if(jj < 0 || jj > 31)
  21.   return false;
  22.  else if(mm < 0 || mm > 12)
  23.   return false;
  24.  else if(aaaa < 1900 || aaaa > 2200)
  25.   return false;
  26.  else {
  27.   switch(mm) {
  28.   case 1 : case 3 : case 5 : case 7 : case 8 : case 10: case 12:
  29.    if(jj > 31)
  30.     return false;
  31.    break;
  32.   case 4 : case 6 : case 9 : case 11 :
  33.    if(jj > 30)
  34.     return false;
  35.    break;
  36.   case 2 :
  37.    if(estUneAnneeBissextile(aaaa) && jj > 29) {
  38.     return false;
  39.    }
  40.    else if(! estUneAnneeBissextile(aaaa) && jj >28) {
  41.     return false;
  42.    }
  43.    break;
  44.   default : logger.error("Erreur inattendue lors de la verification de la validite d'une date." );
  45.   }
  46.  }
  47.  return true;
  48. }
  49. public static  boolean estUneAnneeBissextile(int year) {
  50.  return (year%4 ==0) && ( (year%100 !=0) || (year%400 ==0) );
  51. }


n°1418109
jerhom
Posté le 02-08-2006 à 13:53:55  profilanswer
 

Je te remercie de ce que tu fais. Par contre je suis prêt à chercher mais j'aurais voulu qu'on me mette un peu plus sur la voie, du genre : "ce que tu demandes, il faut que tu le développes toi même" ou "regardes mieux la fonction machin de la classe truc qui correspond à ce que tu demande".
A la base, je pensais qu'il y avait un moyen simple avec une string du type "jj-mm-aaaa" de dire si oui ou non c'est une date valide. J'avais moi même commencé à parser mon string pour récupérer chaque champ, mais je ne trouvais pas ça sexy. Si c'est la seul façon, merci de me le confirmer ;)

n°1418179
souk
Tourist
Posté le 02-08-2006 à 14:35:44  profilanswer
 

Code :
  1. dateFormat.setLenient(false);


 
c'est dans la javadoc hein [:pingouino]

mood
Publicité
Posté le 02-08-2006 à 14:35:44  profilanswer
 

n°1418214
jerhom
Posté le 02-08-2006 à 15:05:39  profilanswer
 

souk a écrit :

Code :
  1. dateFormat.setLenient(false);


 
c'est dans la javadoc hein [:pingouino]


 
C'est pas toujours évident de s'y retrouver dans la javadoc, surtout quand le terme "lenient" n'est pas parlant.
 
Je te remercie de cette précieuse aide.  :jap:

n°1418234
the real m​oins moins
Posté le 02-08-2006 à 15:24:28  profilanswer
 

brasseld a écrit :

Tiens c'est fait à l'arrache mais ça fonctionne...


tu sors.


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1418241
brasseld
Posté le 02-08-2006 à 15:29:10  profilanswer
 

non, setLenient(boolean) pour vérifier si une date est valide ou pas... A l'école on te demande à ce que tes noms de méthode soit parlant ok, mais sur la javadoc c'est un minimum...

n°1418249
the real m​oins moins
Posté le 02-08-2006 à 15:33:19  profilanswer
 

brasseld a écrit :

non, setLenient(boolean) pour vérifier si une date est valide ou pas... A l'école on te demande à ce que tes noms de méthode soit parlant ok, mais sur la javadoc c'est un minimum...


hmmm ?


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1418265
brasseld
Posté le 02-08-2006 à 15:43:24  profilanswer
 

Pas grave...
Je disais juste que en cours on t'oblige à donner à tes méthodes un nom qui a du sens, qu'il indique ce que fait ta méthode. Or dans le cas du setLenient(boolean), il faut dire que le nom n'est pas trés explicite sur le contenu de cette méthode. Aprés, c'est sur que ce que je lui ai dis c'est pas beau quand il existe une méthode adéquate... Mais je ne sortirai pas pour autant ;-)

n°1418269
the real m​oins moins
Posté le 02-08-2006 à 15:46:39  profilanswer
 

http://img180.imageshack.us/img180/3171/picture2rg9.png
 
Je vois pas ce qu'il y a de pas explicite, c'est juste que tu connaissais pas le terme "lenient" [:spamafote] (même s'il devrait etre a false par defaut, je trouve)
 
Et si, tu sors, pour l'immonde caca que tu as pondu ci-dessus [:dawao]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1418275
brasseld
Posté le 02-08-2006 à 15:50:39  profilanswer
 

Mouais....bref.

n°1418281
the real m​oins moins
Posté le 02-08-2006 à 15:55:03  profilanswer
 

non mais si tu veux, tu peux toujours rapporter un bug à sun en leur suggérant un meilleur nom [:itm]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1418286
brasseld
Posté le 02-08-2006 à 15:57:21  profilanswer
 

Non ça va, mais le fait que lenient doit être à false par défaut est plus intéressant...je te laisse t'en occuper [:itm]

n°1418304
souk
Tourist
Posté le 02-08-2006 à 16:20:42  profilanswer
 

mais en fait c'est normal comme comportement, toutes les classes heritant de java.text.Format sont permissives par defaut, et c'est normal, leur role est de formater, pas de valider [:souk]
 
ex:

Code :
  1. Number number = NumberFormat.getIntegerInstance().parse("123CoucouJeSuis un Integer yeah ;)" );
  2. System.out.println("number = " + number);


 
et ca donne:

number = 123


 
 [:dawao]


Message édité par souk le 02-08-2006 à 16:21:15
n°1418307
brisssou
8-/
Posté le 02-08-2006 à 16:24:18  profilanswer
 

délire le coup du [ code=java ] !!
 
bon, j'attéris peut-être un peu...


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [RESOLU][java] transformer un champ String en date

 

Sujets relatifs
Histoire de dateRequete SQL : sélectionner 1 date ou 1 autre en fonct de leurs valeurs
JAVA DebuggerTransformer une matrice à une image
[RESOLU] Eclipse, Jar exécutable, encore et encore...Librairie Mcal [Résolu]
[c][résolu] SDL et API Windows[Résolu] [C#] Mettre à jour une List à partir d'une autre
[Résolu] [C#.Net] Problème de HiddenField.Value toujours vide[Résolu][C#.Net] Datasource d'un gridView : s'update automatiquement ?
Plus de sujets relatifs à : [RESOLU][java] transformer un champ String en date


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR