IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Une fonction pour vérifier si une saisie est une date

Les saisies des dates erronées en avez-vous marre? Voici une proposition d'une fonction vérifiant si une date est correcte dans un format donné. Elle est accompagné de javadoc pour plus de détails. Cette mise à jour élargit le champ de format et optimise la version originale publiée le 29/09/2013.
Avatar de joel.drigo
Modérateur https://www.developpez.com
Le 30/09/2013 à 8:33
Citation Envoyé par MasterMbg Voir le message

Si Joel.Drigo serait gentil de m'aider à y parvenir car l'énumération ne prend pas en charge la présentation des formats (yyyy/MM/dd ou dd/MM/yyyy)
Code : Sélectionner tout
1
2
3
4
public enum format{
    yyyy/MM/dd, dd/MM/yyyy
    }
Merci beaucoup
Euh, bah, par exemple

Code : Sélectionner tout
1
2
3
public enum Format {
    FRANCAIS, ANGLAIS
}
et un switch dans la méthode pour sélectionner le format associé.

ou :

Code : Sélectionner tout
1
2
3
4
5
6
7
public enum Langue{
    FRANCAIS("dd/MM/yyyy"), ANGLAIS("yyyy/MM/dd");
    public final String format;
    private Langue(String format) {
        this.format=format;
    }
}
et dans la méthode ça s'utilise :

Code : Sélectionner tout
1
2
3
4
5
public boolean ver(String st, Langue langue) {
...
SimpleDateFormat sdf=new SimpleDateFormat(langue.format);
...
}
EDIT: au lieu d'une enum, on pourrait également utiliser un argument de type java.util.Locale
Avatar de joel.drigo
Modérateur https://www.developpez.com
Le 30/09/2013 à 14:17
Citation Envoyé par tchize_ Voir le message
@joel.drigo
Oui, il y a des cas où on ne passe pas par le parse par la suite. Cependant, en général toutes les dates dans le programmes sont contrainte au même format -> C'est con d'aller créer le DateFormat à chaque fois dans la méthode.
Ce code fait 3 ligne à écrire.
Certes, c'est tout juste un ersatz de tuto pour débutant sans les explications qui vont avec. Y'a un modérateur sur la partie téléchargez je suppose pour faire le tri.


Même si on met ça dans une méthode pour factoriser (ce que je recommande fortement), la méthode sera spécifique à chaque utilisateur -> je trouve ça assez prétentieux d'aller mettre ça dans la section téléchargez de DVP.
Oui, c'est sur.


Après on aurait un truc pour vérifier si c'est un nombre, un autre pour vérifier si c'est positif et un autre pour savoir si mon chat veux du thon ou du poulet aujourd'hui.
Pour le coup, cette dernière méthode pourrait m'intéresser J'aurais à l'écrire que je serais bien ennuyé
Avatar de tchize_
Expert éminent sénior https://www.developpez.com
Le 29/09/2013 à 15:56
Pourquoi passer par cette méthode complexe alors que, de toutes façons on va vouloir la parser après -> On aura un DateFormat -> Autant l'utiliser directement.

Le code de la FAQ est plus simple à ce sujet:
http://java.developpez.com/faq/java/...E_DATE_Lenient
Avatar de MasterMbg
Modérateur https://www.developpez.com
Le 30/09/2013 à 3:05
Salut,
Merci pour toutes ces remarques aussi constructives qu'elles soient . J'ai jugé mieux de mettre à jour la méthode en tenant compte de quelques unes de ces remarques et les points touchés sont les suivants:

- pourquoi parser par une variable intermédiaire s et pas directement st ?

- pourquoi créer une instance de date non utilisée (lignes 14 et 27) ?

- admettons de contraindre à 2 formats supportés (perso je trouve ça vraiment super limité)

- Le code de la FAQ est plus simple à ce sujet:
http://java.developpez.com/faq/java/...E_DATE_Lenient
Néanmoins, ce que je n'ai pas pu réaliser c'est:

- admettons de contraindre à 2 formats supportés (perso je trouve ça vraiment super limité) mais pourquoi contraindre l'utilisateur à les passer en argument : autant fournir une énumération avec 2 valeurs, ou à la limite des constantes !
Si Joel.Drigo serait gentil de m'aider à y parvenir car l'énumération ne prend pas en charge la présentation des formats (yyyy/MM/dd ou dd/MM/yyyy)
Code : Sélectionner tout
1
2
3
4
public enum format{
    yyyy/MM/dd, dd/MM/yyyy
    }
Merci beaucoup
Avatar de joel.drigo
Modérateur https://www.developpez.com
Le 30/09/2013 à 8:45
Citation Envoyé par tchize_ Voir le message
Pourquoi passer par cette méthode complexe alors que, de toutes façons on va vouloir la parser après -> On aura un DateFormat -> Autant l'utiliser directement.

Le code de la FAQ est plus simple à ce sujet:
http://java.developpez.com/faq/java/...E_DATE_Lenient
C'est vrai dans le cas général, mais on peut avoir des programmes qui ne traitent pas les saisies de date en java.util.Date (un client/serveur ou ce traitement est fait coté serveur uniquement par exemple, un générateur de fichier texte avec des données de type date, etc.) et on veut simplement faire de la validation coté client (c'est vrai que pour valider une saisie dans un formulaire de saisie utilisant un JFormattedTextField ou un composant "date picker" cette fonction est également inutile).

On peut transformer la fonction pour qu'elle renvoit un java.util.Date au lieu d'un booléen aussi.
Avatar de tchize_
Expert éminent sénior https://www.developpez.com
Le 30/09/2013 à 14:07
@joel.drigo
Oui, il y a des cas où on ne passe pas par le parse par la suite. Cependant, en général toutes les dates dans le programmes sont contrainte au même format -> C'est con d'aller créer le DateFormat à chaque fois dans la méthode.
Ce code fait 3 ligne à écrire.

Même si on met ça dans une méthode pour factoriser (ce que je recommande fortement), la méthode sera spécifique à chaque utilisateur -> je trouve ça assez prétentieux d'aller mettre ça dans la section téléchargez de DVP. C'est pas un endroit pour taper tous les bout de code qu'on a écrit sur des coins de table à la pause déjeuner. Après on aurait un truc pour vérifier si c'est un nombre, un autre pour vérifier si c'est positif et un autre pour savoir si mon chat veux du thon ou du poulet aujourd'hui.
Avatar de Ceddoc
Membre éclairé https://www.developpez.com
Le 30/09/2013 à 14:17
Citation Envoyé par tchize_ Voir le message
Après on aurait un truc pour vérifier si c'est un nombre, un autre pour vérifier si c'est positif et un autre pour savoir si mon chat veux du thon ou du poulet aujourd'hui.
C'est déjà le cas (ici)

J'avoue qu'il y a peu de chance que j'utilise ce type de code, surtout que la plupart des frameworks proposent des vérifications de ce genre intégrées.
Avatar de tchize_
Expert éminent sénior https://www.developpez.com
Le 30/09/2013 à 14:34
Citation Envoyé par joel.drigo Voir le message


Pour le coup, cette dernière méthode pourrait m'intéresser J'aurais à l'écrire que je serais bien ennuyé
Code : Sélectionner tout
1
2
3
4
5
6
7
public enum Food{
  POULET,THON
}

public Food whatDoesCatWant(){
  throw new SorryException("Désolé, votre dernier chat est mort d'une insuffisance rénale il y a un an et demi");
}
J'avoue, mon implémentation ne concerne que mon cas
Avatar de MasterMbg
Modérateur https://www.developpez.com
Le 02/10/2013 à 11:18
Citation Envoyé par joel.drigo Voir le message

Pour le coup, cette dernière méthode pourrait m'intéresser J'aurais à l'écrire que je serais bien ennuyé
Merci pour avoir jeté un coup d'oeil sur la mise à jour que j'ai faite subir à ma méthode. C'est plutôt encourageant de ta part au lieu de jeter des pierres de feu sur les têtes des développeurs en cours d'expérience (ce qui porrait causer de dégoût de continer).
Encore grand merci, je continuerai dans ce qu'est ma passion.
Developpez.com décline toute responsabilité quant à l'utilisation des différents éléments téléchargés.