Rechercher : dans
Par :

Validation d'un date (java)

Dernière réponse le 5 avr 2009 à 08:12:38 Ivvrick, le 8 déc 2001 à 18:53:10 
 Signaler ce message aux modérateurs

Bonjour la liste,

J'ai trois données , le jour JJ , le mois MM , l'année AAAA, et je veux tester la logique de cette date.
Or je me suis servis des méthodes java de DateFormat , gregorianCalendar, mais elles ne permettent que de tester le format de la date , et si je le respecte , je peux leur donner 99/02/2001 sans lever d'erreurs.

Quelqu'un pourrait-il me donner la procédure à suivre en java , ou simplement me donner un algo ( en C ou C++...m'importe ) qui teste la validité d'une date julienne (en prennant en compte toutes les exceptions ...style années bisextile..etc etc..)


Merce de votre aide

Meilleures réponses pour « Validation d'un date (java) » dans :
[Logiciel libre] Installation firefox 2.0+java+flash VoirInstallation firefox 2.0+java+flash en ligne de commande A. INTRODUCTION B. INSTALLATION FIREFOX 1. Création d'environnement 2. Téléchargement et vérification de la signature 3. Installation de Firefox 4. Démarrage de l'application C....
Javascript - L'objet Date VoirLes particularités de l'objet Date L'objet Date permet de travailler avec toutes les variables qui concernent les dates et la gestion du temps. Il s'agit d'un objet inclus de façon native dans Javascript, et que l'on peut toujours utiliser. La...
Java - Les packages VoirIntroduction aux packages La programmation Java consiste à créer des classes. Or, étant donné qu'un programme est généralement développé par une équipe de programmeurs, c'est-à-dire plusieurs personnes, le fait de concaténer (mettre bout à bout)...
Java - Les objets VoirLa création d'objets Un objet est une instance de classe, la création d'objets s'appelle donc l'instanciation. Cette instanciation se fait grâce à l'opérateur new suivi du nom de la classe à instancier et de parenthèses contenant les paramètres...

1

Hacktrack, le 18 déc 2001 à 10:21:25
  • +2

Voici une solution à ton problème:


import java.util.*;

/**
* @author HackTrack
* @version 1.0
*/
public class CalTester{

public CalTester() {
}

private boolean testDate(int year, int month, int day){
GregorianCalendar calendar = new GregorianCalendar();
calendar.set(year, month, day);
int goodYear = calendar.get(Calendar.YEAR);
int goodMonth = calendar.get(Calendar.MONTH);
int goodDay = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println("***************************");
System.out.println("Date entrée = " + year + month + day);
System.out.println("Date formatée = " + goodYear + goodMonth + goodDay);

if(goodYear==year & goodMonth==month & goodDay==day){
System.out.println("Date valide");
return true;
}
System.out.println("Date non valide");
return false;

}


public static void main (String args[]) {
CalTester tester = new CalTester();

int yearToTest = 2001;
int monthToTest = 10 ;
int dayToTest = 18 ;
tester.testDate(yearToTest, monthToTest, dayToTest);

yearToTest = 2001;
monthToTest = 14 ;
dayToTest = 18 ;
tester.testDate(yearToTest, monthToTest, dayToTest);

yearToTest = -2001;
monthToTest = 7 ;
dayToTest = 21 ;
tester.testDate(yearToTest, monthToTest, dayToTest);

yearToTest = 2001;
monthToTest = 158 ;
dayToTest = 21 ;
tester.testDate(yearToTest, monthToTest, dayToTest);

}
}


;-)

Répondre à Hacktrack

2

Hacktrack, le 18 déc 2001 à 10:21:30

Voici une solution à ton problème:


import java.util.*;

/**
* @author HackTrack
* @version 1.0
*/
public class CalTester{

public CalTester() {
}

private boolean testDate(int year, int month, int day){
GregorianCalendar calendar = new GregorianCalendar();
calendar.set(year, month, day);
int goodYear = calendar.get(Calendar.YEAR);
int goodMonth = calendar.get(Calendar.MONTH);
int goodDay = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println("***************************");
System.out.println("Date entrée = " + year + month + day);
System.out.println("Date formatée = " + goodYear + goodMonth + goodDay);

if(goodYear==year & goodMonth==month & goodDay==day){
System.out.println("Date valide");
return true;
}
System.out.println("Date non valide");
return false;

}


public static void main (String args[]) {
CalTester tester = new CalTester();

int yearToTest = 2001;
int monthToTest = 10 ;
int dayToTest = 18 ;
tester.testDate(yearToTest, monthToTest, dayToTest);

yearToTest = 2001;
monthToTest = 14 ;
dayToTest = 18 ;
tester.testDate(yearToTest, monthToTest, dayToTest);

yearToTest = -2001;
monthToTest = 7 ;
dayToTest = 21 ;
tester.testDate(yearToTest, monthToTest, dayToTest);

yearToTest = 2001;
monthToTest = 158 ;
dayToTest = 21 ;
tester.testDate(yearToTest, monthToTest, dayToTest);

}
}


;-)

Répondre à Hacktrack

3

ivvrick, le 5 jan 2002 à 23:20:24

Merci beaucoup, j'étais passé à coté...
A+

Répondre à ivvrick

4

switch1, le 28 jan 2009 à 20:28:52

Monsieur Hacktrack
ton objet marche pas bien
essayer
year : 2009
mois :1
jours 30 ou 31
!!!!!!!!!!!!!!!!!!!!

Répondre à switch1

5

danimo, le 30 jan 2009 à 07:57:00

Bonjour,

Puisque cette demande vient de recevoir une rnouvelle réponse après plus de 7 ans, j'ajoute ceci:


import java.util.GregorianCalendar;
................
................


GregorianCalendar dGC = new GregorianCalendar();

int annee = 2009;
int num_mois = 1; // janvier
int jour = 30; // ne provoque pas la levée de l'exception ou 31, 29 non

try
{
dGC = new GregorianCalendar(annee, num_mois - 1, jour); // 0 = janvier
// NE PAS OUBLIER num_mois - 1 pour le parametre mois!!!...
// les num. de mois étant donnés ou obtenus sous la forme 0 à 11

// controle de la validite de la date: avec setLenient(false) pas d'indulgence:
dGC.setLenient(false); // sans cette ligne, pas d'exception possible
// (true par defaut) donc "indulgence"
// mais très utile pour les manip. de dates (calculs)

// c'est a la lecture qu'il y a l'eventuelle exception
int anneeB = dGC.get(GregorianCalendar.YEAR);
int num_moisB = dGC.get(GregorianCalendar.MONTH);
int jourB = dGC.get(GregorianCalendar.DAY_OF_MONTH);
}
catch (Exception e)
{
e.printStackTrace();
}

// Avec num_mois = 2; erreur
// Avec jour > nombre de jours maxi de num_mois ou <0 : erreur

Répondre à danimo

6

switch1, le 2 fév 2009 à 13:30:38

Hhh
thank you

Répondre à switch1

7

cool g, le 5 avr 2009 à 01:49:05

Bonjour
je voudrais récupérer une date d'une JTextField et l'enregistrer dans une base de données Mysql.
j'arrive à l'ajouter mais la date est tjours 15 10 1580, meme si je met une autre date.
parexemple pour ce code la date est tjours 15 10 1580;(et si c d2 que j'enregistre dans ma base de donnée)
comment vais je faire pour insérer une date de naissance 13 02 1987 parexemple
import java.util.*;
public class test{
public static void main(String[]args){
Date d=new Date();
Calendar c1=new GregorianCalendar();
Calendar c=new GregorianCalendar(2009,12,07);
Date d2=((GregorianCalendar)c).getGregorianChange();

d2= new java.sql.Date(d.getTime());
System.out.println(d2.toString()+"\n");

}
}

Répondre à cool g

8

 danimo, le 5 avr 2009 à 08:12:38

Salut,

Tout d'abord, il aurait été préférable d'ouvrir un autre post, car celui-ci concerne un tout autre sujet: contrôler qu'une date est correcte.

Mais bon...

tu demandes:

"je voudrais récupérer une date d'une JTextField et l'enregistrer dans une base de données Mysql.
j'arrive à l'ajouter mais la date est tjours 15 10 1580, meme si je met une autre date.
par exemple pour ce code la date est tjours 15 10 1580;(et si c d2 que j'enregistre dans ma base de donnée)
comment vais je faire pour insérer une date de naissance 13 02 1987 par exemple ..."

Avec Date d=new Date(); nous obtenons la date (et l'heure) système (qui normalement est la date du jour si on n'a pas "bidouillé" cette date du jour) sous cette forme:
d = Sat Apr 04 22:53:11 CST 2009 en faisant un println de d

Avec Calendar c1=new GregorianCalendar(); nous obtiendrons là aussi la date du jour mais sous une toute autre forme.
par exemple, il nous faudra écrire :

int annee = c1.get(Calendar.YEAR); pour obtenir l'année (2009),
int num_mois = c1.get(Calendar.MONTH); pour obtenir le mois (3 car le n° de mois retourné est une valeur de 0 à 11) et
int jour = c1.get(Calendar.DAY_OF_MONTH); pour obtenir le n° de jour du mois (4 car le n° de jour retourné est 1 à 30)

Pour entrer une date particulière ( la date de naissance dont il est question dans ton exemple 13 02 1987):
il faudraet utiliser Calendar c=new GregorianCalendar(int annee, int mois -1, int jour);
soit:
Calendar c=new GregorianCalendar(1987, 1, 13);

Quant à cette ligne :
Date d2=((GregorianCalendar)c).getGregorianChange();
Je ne vois pas ce que tu veux faire, mais c'est elle qui te donne ta fameuse date 15 10 1580 (ou quelque chose comme cà).

Tout celà pour te montrer (ou te rappeler) une toute petite partie de l'utilisation de Calendar.

Mais tu dis que la date que tu veux enregistrer dans ta base de données est à récupérer dans un JTextField.
Sous quelle forme est entrée cette date ? Sous quelle forme veux-tu l'envoyer ?
Tu dois bien avoir un moyen de l'envoyer à ta base sans passer ni par Date, ni par Calendar non !... en faisant un get du JTextField, et en la mettant sous la forme voulue avant de la transférer...

Si tu as des questions à me poser, n'hésites pas (sauf sur Mysql que je n'ai pas, mais quelqu'un d'autre te répondra sans doute).

Cordialement,

Dan

Répondre à danimo