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

Java Discussion :

Controle sur une date en Java


Sujet :

Java

  1. #1
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    538
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 538
    Par défaut Controle sur une date en Java
    Bonjour,

    Je récupère une date dans un String. Cette date est renseigner par des utilisateurs d'un programme et est censé respecter ce format : DDMMYYYY.
    Le problème c'est qu'il y a souvent des erreurs, l'utilisateur peut potentiellement mettre n'importe quoi.

    Comment faire au plus simple pour :
    - Vérifier le format de la date
    - Vérifier que la date est comprise entre 01/01/1900 et TODAY.

    Merci.

  2. #2
    Membre Expert
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Par défaut
    Je te donne deux pistes :

    http://docs.oracle.com/javase/7/docs...ateFormat.html

    https://docs.oracle.com/javase/7/doc.../Calendar.html

    Normalement, il y a tous les éléments qu'il faut dans la documentation pour t'aider à trouver une solution à ton problème avec ces deux classes !

  3. #3
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    538
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 538
    Par défaut
    Oui merci. J'ai déjà trouvé des exemples, sur ce forum. Mais je souhaite faire le plus propre et simple possible.

  4. #4
    Membre Expert
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Par défaut
    Citation Envoyé par CliffeCSTL Voir le message
    Oui merci. J'ai déjà trouvé des exemples, sur ce forum. Mais je souhaite faire le plus propre et simple possible.
    Montres-nous comment tu fais pour l'instant, on te dira comment l'améliorer

  5. #5
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    538
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 538
    Par défaut
    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
    String DclDateActe056 = "01012015";
    if (DclDateActe056.length() == 8) {     
        try {
            SimpleDateFormat sdf = new SimpleDateFormat("ddMMyyyy");
            Date dateQuest  = sdf.parse(DclDateActe056);
            Date dateNi     = sdf.parse("01011900");
            Date dateActuel = new Date();
     
            if (dateQuest.compareTo(dateActuel) > 0) {
                System.out.println("La date est dans le futur");
            } else if (dateQuest.compareTo(dateNi) < 0 ) {
                System.out.println("La date est avant 1900");
            }
     
        } catch (ParseException e) {
            e.printStackTrace();
        } 
    } else {
        System.out.println("Mauvais format de la date, trop de caractère");
    }

  6. #6
    Membre Expert
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Par défaut
    Tester la taille de la chaîne, c'est déjà bien, tu enlèves deux cas pourri !

    Pour le reste ben... Ca marche déjà de manière simple et efficace !
    Ce que tu pourrais améliorer, c'est les tests sur les dates: l'objet Date à une fonction before() et une fonction after qui serait plus explicite dans ton cas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            if (dateQuest.after(new Date())) {
                System.out.println("La date est dans le futur");
            } else if (dateQuest.before(dateNi)){
                System.out.println("La date est avant 1900");
            }
    Et sinon, il faut modifier le catch
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    } catch (ParseException e) {
                System.out.println("Format de date inconnu, ou date incohérente");
        }
    Et c'est tout, y'a pas grand chose à améliorer !

  7. #7
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 577
    Par défaut
    On pourrait éventuellement :

    - ajouter une protection contre le 45 Janvier (45012015), le 29 Février 2011 (29022011), ou le 3 Hexadécembre (03182015).

    avec sdf.setLenient(false); .

    - éviter de parser la date mini à chaque fois : elle va pas changer d'un appel à l'autre, alors c'est pas très clair comme idée. Plutôt la stocker dans une variable private static final, initialisée dans un bloc static.

    - S'intéresser à passer à Java 1.8 et utiliser des LocalDate et tout le toutim au lieu des anciennes Date et leurs bizarreries.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    538
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 538
    Par défaut
    Très bien. Merci.

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

Discussions similaires

  1. Problème de select sur une date (DATETIME....)
    Par zeldoi5 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 16/05/2005, 11h19
  2. requette sur une date
    Par AlphonseBrown dans le forum Langage SQL
    Réponses: 13
    Dernier message: 04/04/2005, 12h41
  3. Travailler sur une date
    Par HqX dans le forum Langage SQL
    Réponses: 11
    Dernier message: 05/10/2004, 15h54
  4. Problème lors d'un Update sur une date
    Par Nany dans le forum ASP
    Réponses: 3
    Dernier message: 19/05/2004, 22h37
  5. [SQL] Conditions sur une date dans une requete
    Par poufouille dans le forum Bases de données
    Réponses: 4
    Dernier message: 17/03/2004, 14h25

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