Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2247 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Transformation de string en java.sql.date

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Transformation de string en java.sql.date

n°1167492
cemoi58
Posté le 02-08-2005 à 08:28:31  profilanswer
 

Bonjour à tous,  
J'ai un petit souci de transformation d'une String en date.
 
Ma string est de ce format : 01-Aug-2005 17:38:14
J'essaie de la tranformation en type date et j'obtiens ceci : 2005-08-01
 
Le problème est que ce n'est pas le résultat que je souhaite  :cry:  
 
En effet, le résultat que je voudrais est la même chose que ma String mais au format date.
 
J'ai le code suivant :
 

Code :
  1. public void fonction (String currentDate,int id, String dateExp)
  2. {
  3.         Date result1 = null, result2 =null;
  4.         try
  5.         {
  6.             SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss",Locale.ENGLISH);
  7.  
  8.             ParsePosition pos = new ParsePosition(0);
  9.             java.util.Date resultTemp = sdf.parse(currentDate,pos);
  10.             result1 = new Date(resultTemp.getTime());
  11.            
  12.             pos = new ParsePosition(0);
  13.             resultTemp = sdf.parse(dateExp,pos);
  14.             result2 = new Date(resultTemp.getTime());
  15.            
  16.             System.out.println("CurrentDate = " + currentDate);
  17.             System.out.println("result1.toString() = " + result1.toString());
  18.            
  19.             Statement update = connect.createStatement();
  20.             update.executeUpdate("UPDATE PDM.ITTWFSTEP SET DATEIN = TO_DATE('"+ result1.toString() +"','DD-MON-YYYY HH24:MI:SS'), DATEEXP = TO_DATE('"+ result2.toString() +"','DD-MON-YYYY HH24:MI:SS') WHERE ID= "+ id);


 
Mes 2 "System.out.println" me sortent donc le résultat suivant :
CurrentDate = 01-Aug-2005 17:38:14
result1.toString() = 2005-08-01
 
En plus, j'ai l'erreur suivante quand je veux insérer dans ma base de données avec la fonction ci-dessus:
 
SQLState : 22008
Description : ORA-01861: le littéral ne concorde pas avec le format chaîne de caractères
Error code : 1861
 
Je pense que cette erreur est liée au fait que justement, je n'insère pas au format souhaité dans la base.  :pfff:  
 
Pouvez-vous m'aider s'il vous plééééééé!!!  :cry:  :cry:  :cry:  

mood
Publicité
Posté le 02-08-2005 à 08:28:31  profilanswer
 

n°1167501
Nicolas_75
Posté le 02-08-2005 à 08:50:09  profilanswer
 

Il y a quelque chose que je n'ai pas dû comprendre.
Si tu veux que result1.toString() soit exactement le même que la String currentDate, il suffit... de remplacer le result1.toString() de ton code par currentDate ?
 
Nicolas

n°1167509
cemoi58
Posté le 02-08-2005 à 09:04:11  profilanswer
 

[u]

Nicolas_75 a écrit :

Il y a quelque chose que je n'ai pas dû comprendre.
Si tu veux que result1.toString() soit exactement le même que la String currentDate, il suffit... de remplacer le result1.toString() de ton code par currentDate ?
 
Nicolas


 
Oui, tu as raison: j'ai oublié de préciser un gros détails :sarcastic:  Le problème que j'ai est que la base de données n'accepte que des dates au format français. Il me faut donc transformer 01-Aug-2005 17:38:14  
en 01-août -2005 17:38:14 AM (C'est comme ca que c'est stocké dans la base)
 
...mais ca marche pô... :cry:

n°1167513
cemoi58
Posté le 02-08-2005 à 09:06:21  profilanswer
 

cemoi58 a écrit :

[u]
 
Oui, tu as raison: j'ai oublié de préciser un gros détails :sarcastic:  Le problème que j'ai est que la base de données n'accepte que des dates au format français. Il me faut donc transformer 01-Aug-2005 17:38:14  
en 01-août -2005 17:38:14 AM (C'est comme ca que c'est stocké dans la base)
 
...mais ca marche pô... :cry:


 
Petit rectificatif : c'est 5:38:14 AM et non pas 17:38:14 AM

n°1167518
Nicolas_75
Posté le 02-08-2005 à 09:13:51  profilanswer
 


Le format d'arrivée est : "01-août-2005 5:38:14 AM".
C'est un mélange de français et d'anglais, non ?

n°1167523
Nicolas_75
Posté le 02-08-2005 à 09:18:50  profilanswer
 

Après tout, pourquoi pas ?

Code :
  1. import java.text.SimpleDateFormat;
  2. import java.util.Date;
  3. import java.util.Locale;
  4. public class TestFormatDate {
  5.    
  6.    public static void main(String[] args) {
  7.           try {
  8.             String s3 = "01-Aug-2005 17:38:14";
  9.             System.out.print(s3+" -> " );
  10.             Date date = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss",Locale.ENGLISH).parse(s3);
  11.             String s4 = new SimpleDateFormat("dd-MMM-yyyy hh:mm:ss aaa", Locale.FRENCH).format(date);
  12.             System.out.println(s4);
  13.         } catch (Exception e) { e.printStackTrace(); }
  14.     }
  15. }


Sortie :

01-Aug-2005 17:38:14 -> 01-août-2005 05:38:14 PM

n°1167531
cemoi58
Posté le 02-08-2005 à 09:23:03  profilanswer
 

Nicolas_75 a écrit :

Le format d'arrivée est : "01-août-2005 5:38:14 AM".
C'est un mélange de français et d'anglais, non ?


 
Oui, mais apparemment c'est possible de le faire.
En fait, c'est pas moi qui ai fait la base de données et donc je suis obligé de m'adapter à ce que qui a été fait...malheureusement :(  
 
Mais il semble que côté heure, Oracle se charge lui-même de faire la transformation de 17:38:14 vers 5:38:14 AM. C'est en tout cas ce que j'ai remarqué en insérant 17:38:14 dans la base.  

n°1167535
Nicolas_75
Posté le 02-08-2005 à 09:27:32  profilanswer
 

OK ! Le code ci-dessus répond-il à ton besoin ?
 
Nicolas

n°1167553
cemoi58
Posté le 02-08-2005 à 09:41:41  profilanswer
 

Nicolas_75 a écrit :

OK ! Le code ci-dessus répond-il à ton besoin ?
 
Nicolas


 
Oui!!! C'est cool, la date est au bon format mais visiblement, lors de l'insertion dans la base de données, ca me met :
 
SQLState : 22008
Description : ORA-01843: ce n'est pas un mois valide
Error code : 1843
 
Mais, maintenant, je pense que c'est plus un problème lié à la base elle-même. Je vais regarder ca de plus prêt car la date est à ce format dans la base de données, je vais regarder si ce n'est pas dû au caractère " " manquant dans "01-août -2005 11:31:16 AM" entre la fin de "août" et le "-"
 
Je te tiens au courant.
 

n°1167562
Nicolas_75
Posté le 02-08-2005 à 09:48:31  profilanswer
 

Si il y a un espace toujours, quelque soit le mois, il suffit de substituer dans mon code :

Code :
  1. String s4 = new SimpleDateFormat("dd-MMM -yyyy hh:mm:ss aaa", Locale.FRENCH).format(date);


En revanche, si l'espace est dû à un formatage du mois sur 5 caractères, cela risque d'être plus compliqué !
 
Nicolas


Message édité par Nicolas_75 le 02-08-2005 à 09:49:51
mood
Publicité
Posté le 02-08-2005 à 09:48:31  profilanswer
 

n°1167860
cemoi58
Posté le 02-08-2005 à 14:18:33  profilanswer
 

Nicolas_75 a écrit :

Si il y a un espace toujours, quelque soit le mois, il suffit de substituer dans mon code :

Code :
  1. String s4 = new SimpleDateFormat("dd-MMM -yyyy hh:mm:ss aaa", Locale.FRENCH).format(date);


En revanche, si l'espace est dû à un formatage du mois sur 5 caractères, cela risque d'être plus compliqué !
 
Nicolas


Voilà, j'ai ré-essayer mais j'ai toujours des problèmes lors de l'insertion dans la base.
Si je mets :
 

Code :
  1. System.out.print(currentDate+" -> " );
  2.                 date = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss",Locale.ENGLISH).parse(currentDate);
  3.            
  4.                 s4 = new SimpleDateFormat("dd-MMM-yyyy hh:mm:ss aaa", Locale.FRENCH).format(date);
  5.                 System.out.println(s4);
  6. System.out.println("CurrentDate = " + currentDate);
  7.             //System.out.println("result1.toString() = " + result1.toString());
  8.             System.out.println("date = " + date.toString());
  9.             System.out.println("s4 = " + s4);


 
 
 
Ce qui m'affiche en sortie :
02-Aug-2005 14:12:25 -> 02-août-2005 02:12:25 PM
CurrentDate = 02-Aug-2005 14:12:25
date = Tue Aug 02 14:12:25 CEST 2005
s4 = 02-août-2005 02:12:25 PM
 
 
alors le message est le suivant :
SQLState : 22008
Description : ORA-01858: caractère non numérique rencontré à la place d'un numérique
Error code : 1858
 
et la requête qui l'a généré est :
 
Statement update = connect.createStatement();
update.executeUpdate("UPDATE PDM.ITTWFSTEP SET DATEIN = TO_DATE('"+ s4 +"','DD-MON-YYYY HH:MI:SS'), DATEEXP = TO_DATE('"+ s4 +"','DD-MON-YYYY HH:MI:SS') WHERE ID="+ idWF);
 
 

n°1167862
cemoi58
Posté le 02-08-2005 à 14:22:12  profilanswer
 

cemoi58 a écrit :

Voilà, j'ai ré-essayer mais j'ai toujours des problèmes lors de l'insertion dans la base.
Si je mets :
 

Code :
  1. System.out.print(currentDate+" -> " );
  2.                 date = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss",Locale.ENGLISH).parse(currentDate);
  3.            
  4.                 s4 = new SimpleDateFormat("dd-MMM-yyyy hh:mm:ss aaa", Locale.FRENCH).format(date);
  5.                 System.out.println(s4);
  6. System.out.println("CurrentDate = " + currentDate);
  7.             //System.out.println("result1.toString() = " + result1.toString());
  8.             System.out.println("date = " + date.toString());
  9.             System.out.println("s4 = " + s4);


 
 
 
Ce qui m'affiche en sortie :
02-Aug-2005 14:12:25 -> 02-août-2005 02:12:25 PM
CurrentDate = 02-Aug-2005 14:12:25
date = Tue Aug 02 14:12:25 CEST 2005
s4 = 02-août-2005 02:12:25 PM
 
 
alors le message est le suivant :
SQLState : 22008
Description : ORA-01858: caractère non numérique rencontré à la place d'un numérique
Error code : 1858
 
et la requête qui l'a généré est :
 
Statement update = connect.createStatement();
update.executeUpdate("UPDATE PDM.ITTWFSTEP SET DATEIN = TO_DATE('"+ s4 +"','DD-MON-YYYY HH:MI:SS'), DATEEXP = TO_DATE('"+ s4 +"','DD-MON-YYYY HH:MI:SS') WHERE ID="+ idWF);


 
 
 
 
 
 
C'est chiant: ca fait une journée maintenant que je suis sur ce problème... :pt1cable:

n°1167894
Nicolas_75
Posté le 02-08-2005 à 14:42:19  profilanswer
 

Je ne connais pas SQL, et vais probablement dire une énorme bêtise. Ton "format" ('DD-MON-YYYY HH:MI:SS') impose-t-il un mois en 3 caractères ? (Car ce n'est pas le cas de s4.)
 
Nicolas

n°1167901
sircam
I Like Trains
Posté le 02-08-2005 à 14:49:03  profilanswer
 

- Attention à ton masque : HH -> Hour of day (1-12)
- Simplifie ton query pour ne garder qu'un champs à la fois sans clause WHERE. Dans le query que tu nous propose, tu cumules les risques à 3 endroits : comment sais-tu de quel champs il s'agit ?
 
[:pingouino]


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°1167929
lorill
Posté le 02-08-2005 à 15:05:33  profilanswer
 

et surtout, utilise des PreparedStatement et te fais pas chier avec ca, apres tu fais un setDate(..) de ton objet, et ca roule :o

n°1167934
cemoi58
Posté le 02-08-2005 à 15:06:44  profilanswer
 

sircam a écrit :

- Attention à ton masque : HH -> Hour of day (1-12)
- Simplifie ton query pour ne garder qu'un champs à la fois sans clause WHERE. Dans le query que tu nous propose, tu cumules les risques à 3 endroits : comment sais-tu de quel champs il s'agit ?
 
[:pingouino]


 
Ca y est: j'ai trouvé!!!!!! :bounce:  
 
En fait, il y avait plusieurs erreurs qui empêchait l'insertion.
 
La première : en regardant la table oracle, j'avais des dates de ce format :
 
27-avr. -2005 04:48:24 PM
10-mai  -2005 02:56:34 PM
 
Donc, je m'étais dit que le mois était abrégé puisque pour "avril", par exemple, on a un '.'  
Or, ce n'est pas le cas du tout! J'ai essayé en mettant dans ma requête "MONTH" pour signaler le mois complet et là, ca marche!  
 
Voici donc mon code :
 

Code :
  1. System.out.print(currentDate+" -> " );
  2.                 date = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss",Locale.ENGLISH).parse(currentDate);
  3.            
  4.                 s4 = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss", Locale.FRENCH).format(date);
  5.                System.out.println(s4);
  6.                System.out.println("CurrentDate = " + currentDate);
  7.                System.out.println("date = " + date.toString());
  8.                System.out.println("s4 = " + s4);
  9.                        
  10.                Statement update = connect.createStatement();
  11.               update.executeUpdate("UPDATE PDM.ITTWFSTEP SET DATEIN = TO_DATE('"+ s4 +"','DD-MONTH-YYYY HH24:MI:SS'), DATEEXP = TO_DATE('"+ s4 +"','DD-MONTH-YYYY HH24:MI:SS') WHERE IDWF="+ idWF +" AND TYPEWF = '"+ typeDoc +"' AND STATEWF <> 'INITIATION'" );


 
Ce qui donne à l'affichage :
 
02-Aug-2005 14:47:06 -> 02-août-2005 14:47:06
CurrentDate = 02-Aug-2005 14:47:06
date = Tue Aug 02 14:47:06 CEST 2005
s4 = 02-août-2005 14:47:06
 
Et on peut voir ici que le mois d'août n'est pas abrégé! :D  
 
Par contre, et c'est la 2ème subtilité : j'ai dû enlever le "aaa" dans le masque de s4 qui m'indiquait AM ou PM.  
Pour le masque de la requête, il m'a fallut rajouter le 24 effectivement... et c'est Oracle qui met l'heure au format américain. C'est vicieux ça : visiblement, je n'avais pas le droit de le préciser moi-même!!!!  
 
Merci pour vos réponses et surtout, merci Nico pour m'avoir donner la soluce du formattage de la date : j'avais réfléchi dessus tout l'après-midi d'hier! :jap:  
 

n°1167942
cemoi58
Posté le 02-08-2005 à 15:10:01  profilanswer
 

lorill a écrit :

et surtout, utilise des PreparedStatement et te fais pas chier avec ca, apres tu fais un setDate(..) de ton objet, et ca roule :o


 
Vi mais c'est interressant aussi de savoir pourquoi ca déconne... :ange:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Transformation de string en java.sql.date

 

Sujets relatifs
Java Script[JAVA] partage d'instance entre 2 machine
Appeler un programme COBOL depuis JAVAprobleme de date
[JAVA] Interface en mode texteUtilisation du for pour obtenir la date d'un fichier
Requete SQL à une base Access depuis JAVA[RESOLU] Recherche d'un string dans un tableau
Convertir un string en int [debutant] enumeration et tableau de String
Plus de sujets relatifs à : Transformation de string en java.sql.date


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR