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

Collection et Stream Java Discussion :

[DateFormat] Problème validation date


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 39
    Par défaut [DateFormat] Problème validation date
    Bonjour

    J'ai suivit la faq pour vérifier que le contenu d'une chaine de caractère est bien une date mais j'ai un problème de validation sur les années :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
    dateFormat.setLenient(false);
    try {
        dateFormat.parse(str);
        return true;
    } catch (ParseException e) {
        return false;
    }
    Si je passe 12/12/200k ou 12/12/200, ma méthode me renvoie true.. et je n'arrive pas à trouver le problème !

    Merci

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    parse() est assez tolérant sur la longueur des champs, et "01/01/2010" peut être écrit "1/1/2010". Donc "12/12/200" est également une date valide...
    Si tu veux éviter cela, tu peux utiliser un pattern pour vérifier le format de la chaine.

    Enfin, parse() ne lit pas forcément toute la chaine, et s'arrêtera donc au premier caractère incorrect. Donc dans la chaine "12/12/200k" le dernier "k" est ignoré. Il faut utiliser la méthode parse(String, ParsePosition) pour s'assurer que toute la chaine soit bien lu...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    		SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
    		dateFormat.setLenient(false);
    		ParsePosition pp = new ParsePosition(0);
    		dateFormat.parse(str, pp);
    		return pp.getErrorIndex()<0 && pp.getIndex()==str.length();

    Maintenant une petite question : A quoi va te servir cette vérification ???


    a++

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 39
    Par défaut
    Je veux vérifier qu'un champ texte est bien au format dd/mm/aaaa + qu'il représente une date valide avant insertion en BD.
    C'est une solution "temporaire" vu qu'a terme le champ sera remplacé par un datepicker mais avec une livraison dans 3 semaines je vais pas m'amuser à tester des nouveaux composants..

  4. #4
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par iGwendal Voir le message
    Je veux vérifier qu'un champ texte est bien au format dd/mm/aaaa
    Dans ce cas utilise une expression régulière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	Pattern pattern = Pattern.compile("\\d{2}/\\d{2}/\\d{4}");
     
    		boolean ok = pattern.matcher(str).matches();
    Citation Envoyé par iGwendal Voir le message
    + qu'il représente une date valide avant insertion en BD.
    La date est bien stocké en BD dans le format Date ?
    Dans ce cas pourquoi renvoyer true/false alors que tu pourrais directement renvoyer l'objet Date...


    a++

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 39
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    La date est bien stocké en BD dans le format Date ?
    Dans ce cas pourquoi renvoyer true/false alors que tu pourrais directement renvoyer l'objet Date...
    Je passe par un framework de validation et il faut que je lui donne une méthode prenant en paramètre une String et renvoyant un boolean... quitte à reparser derrière pour avoir l'objet Date.

    Du coup je vais lancer la regex pour le format puis vérifier la date via DateFormat.. un peu lourd mais bon..

    Merci pour ton aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème affichage date avec DateFormat
    Par yrtera dans le forum Android
    Réponses: 8
    Dernier message: 18/08/2013, 02h15
  2. Validation de date
    Par supersonicblonde dans le forum CodeIgniter
    Réponses: 0
    Dernier message: 11/04/2011, 17h37
  3. Problème format date et règle de validation
    Par piere42 dans le forum VBA Access
    Réponses: 1
    Dernier message: 27/02/2009, 13h17
  4. Problème de date valide dans un flux
    Par Lazlo dans le forum ODI (ex-Sunopsis)
    Réponses: 3
    Dernier message: 15/02/2009, 19h17
  5. Encore un probléme de date avec TADO !
    Par bNoureddine dans le forum Bases de données
    Réponses: 2
    Dernier message: 22/02/2004, 18h22

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