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 :

Creation d'une date a partir d'un String, comment verifier la validite de la date ?


Sujet :

Collection et Stream Java

  1. #1
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    570
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 570
    Points : 340
    Points
    340
    Par défaut Creation d'une date a partir d'un String, comment verifier la validite de la date ?
    Bonjour, voila j'ai des date à creer à partir de chaine, j'utilise donc la méthode suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/aaaa");
    				Date date = sdf.parse(valeur);
    qui me retourne bien une date.
    Le problème est que si je donne une chaine comme 99/04/2009, cela va faire l'addition des jours supplémentaires, et me donner je crois le 08/07/2009.
    Comment puis je fais pour que le parse me dise, que la date est incohérente ?

  2. #2
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    En fait il y a 2 choses à faire :
    • La première consiste à désactiver le mode lenient, ce qui fait qu'il n'y aura pas de correction de la date mais une erreur.
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
       
      	SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
      	sdf.setLenient(false);
      	Date date = sdf.parse(valeur);
    • Malheureusement cela ne suffit pas, car les méthodes de parse() ont la particularité de ne pas forcément lire le flux en entier : elles s'arrêtent au premier caractère incorrect sans générer d'erreur si elles trouvent quelque chose de valide avant.

      Par exemple la date "01/04/200d" passerait pour le "01/04/0200" et le caractère "d" final serait ignoré.

      Ce comportement permet de lire des éléments depuis des chaines complexes sans forcément les découper.

      Pour éviter cela il faut utiliser la méthode parse() avec un ParsePosition qui nous retourne des infos sur l'exécution, ce qui permet de détecter ce genre de problème.

      On peut faire cela avec la méthode suivante :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      	public static Date parseFullString(DateFormat df, String source) throws ParseException {
      		// On utilise un ParsePosition pour avoir des infos sur le parse()
      		// Le '0' indique qu'on veut traiter la chaine source à partir du début
      		ParsePosition pp = new ParsePosition(0);
       
      		// On effectue le parse
      		Date date = df.parse(source, pp);
       
      		// En cas d'erreur lors du parse, on remonte l'exception :
      		if (date==null || pp.getErrorIndex()>=0) {
      			throw new ParseException("Unparseable date: \"" + source + "\"" ,
      					pp.getErrorIndex());
      		}
      		// On vérifie que toute la chaine soit bien lu :
      		if (pp.getIndex()!=source.length()) {
      			throw new ParseException("Unparseable date: \"" + source + "\"" ,
      					pp.getIndex());
      		}
      		// Si on arrive ici alors c'est OK
      		return date;
      	}


    a++

  3. #3
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    570
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 570
    Points : 340
    Points
    340
    Par défaut
    Merci bien je vais tester tous ca.
    Qu'est ce qu'on perdre comme temps quand même pour gérer les problèmes d'importation de fichier mal foutue :/

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

Discussions similaires

  1. creation d'une BD access à partir de Java
    Par bliml dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 30/04/2007, 15h32
  2. Creation d'une table à partir d'un tableau
    Par fafabzh6 dans le forum Access
    Réponses: 10
    Dernier message: 20/09/2006, 17h10
  3. Réponses: 4
    Dernier message: 18/10/2005, 15h21
  4. Réponses: 9
    Dernier message: 23/08/2005, 16h29
  5. Réponses: 2
    Dernier message: 02/11/2004, 12h38

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