Convertir une chaine à une date

yness91 Messages postés 26 Date d'inscription vendredi 12 mars 2010 Statut Membre Dernière intervention 27 mars 2011 - 18 mars 2010 à 17:51
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 - 19 mars 2010 à 21:38
Bonsoir tout le monde,

J'ai besoin de votre aider pour résoudre un problème.
Je développe un application en java, et j'ai besoin de convertir une chaine de caractère à une variable de type date pour l'insérer dans ma base de données oracle 10g XE.

Pour ceux j'ai écrit cette méthode :


public static Date stringToDate(String sDate, String sFormat) throws Exception {
Date d;
SimpleDateFormat sdf = new SimpleDateFormat(sFormat);
d= sdf.parse(sDate);
return d;

J'ai essayé de tester sa au niveau du main avec ces lignes

connexion c =new connexion(); // c'est la classe qui contient la méthode stringtodate
c.stringToDate(d,"dd/MM/yyyy");
System.out.println(dt.toString());

J'ai comme affichage : Mon Feb 23 00:00:00 CET 1987

Alors que ce n'est pas le format que je souhaite ("dd/MM/yyyy")...

Quelqu'un a une idée sur comment je peux résoudre sa ???

Et merci d'avance :)

4 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
18 mars 2010 à 18:29
Salut,

Normal : tu récupère une instance de la classe Date, mais la fonction toString de la classe Date te formatte la date pour avoir un format lisible, et non selon le format que tu veux toi.

Il te faut réutiliser un DateFormat pour convertir ta date en String pour avoir le format voulu :
String dateNonFormattee = "...";
SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
Date date = format.parse(dateNonFormattee);
System.out.println(format.format(date));


Quel intérêt de faire une fonction qui prend 4 lignes de codes alors que l'utilisation directe d'un simpledateformat ne prend qu'une seule ligne de code ?
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
0
yness91 Messages postés 26 Date d'inscription vendredi 12 mars 2010 Statut Membre Dernière intervention 27 mars 2011
18 mars 2010 à 20:07
Ahh merci bcp Darksidious, sa marche enfin :))
0
yness91 Messages postés 26 Date d'inscription vendredi 12 mars 2010 Statut Membre Dernière intervention 27 mars 2011
19 mars 2010 à 21:34
Salut je voudrais bien te demander une autre petite question... Maintenant que j'ai convertit la chaine de caractère en une date et je l'ai mi au format que je désire, est ce que Oracle reconnait le type date de java? car sa m'a générer une exception lors de son insertion...

Exception in thread "main" java.sql.SQLException: ORA-01858: Caractère non numérique trouvé à la place d'un caractère numérique


Pour plus de détail je te montre le code de la méthode :

public void insert () throws SQLException, ParseException, Exception
{
String prenom= "7amma";
String nom ="jebari";
int cin= 6666;

String d ="23/02/1987";
Date dt= stringToDate(d);//méthode de convertissage de string à date


getconnexion(); //méthode de cx à la bd
stmt =conn.createStatement();
stmt.executeUpdate("INSERT INTO professeurs (prenom,nom,cin,date_de_naissance) VALUES ('" + prenom + "','" + nom + "','" + cin + "', "+ dt +" ) ");
stmt.close();
conn.close();
}
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
19 mars 2010 à 21:38
Salut,

Ce n'est pas oracle qui ne reconnait pas la date, mais la fonction SQL : la fonction SQL nécessite une date formatée, si tu lui
passes le toString de l'objet date (comme tu le fais ici), forcément, ca ne marche pas.

Donc :
SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy"); // Je te laisse trouver le format reconnu par le langage SQL d'Oracle
stmt.executeUpdate("INSERT INTO professeurs (prenom,nom,cin,date_de_naissance) VALUES ('" + prenom + "','" + nom + "','" + cin + "', "+ format.format(dt) +" ) ");


______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
0
Rejoignez-nous