Transformation de string en java.sql.date - Java - Programmation
Marsh Posté le 02-08-2005 à 08:50:09
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
Marsh Posté le 02-08-2005 à 09:04:11
[u]
Nicolas_75 a écrit : Il y a quelque chose que je n'ai pas dû comprendre. |
Oui, tu as raison: j'ai oublié de préciser un gros détails 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ô...
Marsh Posté le 02-08-2005 à 09:06:21
cemoi58 a écrit : [u] |
Petit rectificatif : c'est 5:38:14 AM et non pas 17:38:14 AM
Marsh Posté le 02-08-2005 à 09:13:51
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 ?
Marsh Posté le 02-08-2005 à 09:18:50
Après tout, pourquoi pas ?
Code :
|
Sortie :
01-Aug-2005 17:38:14 -> 01-août-2005 05:38:14 PM |
Marsh Posté le 02-08-2005 à 09:23:03
Nicolas_75 a écrit : Le format d'arrivée est : "01-août-2005 5:38:14 AM". |
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.
Marsh Posté le 02-08-2005 à 09:41:41
Nicolas_75 a écrit : OK ! Le code ci-dessus répond-il à ton besoin ? |
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.
Marsh Posté le 02-08-2005 à 09:48:31
Si il y a un espace toujours, quelque soit le mois, il suffit de substituer dans mon code :
Code :
|
En revanche, si l'espace est dû à un formatage du mois sur 5 caractères, cela risque d'être plus compliqué !
Nicolas
Marsh Posté le 02-08-2005 à 14:18:33
Nicolas_75 a écrit : Si il y a un espace toujours, quelque soit le mois, il suffit de substituer dans mon code :
|
Voilà, j'ai ré-essayer mais j'ai toujours des problèmes lors de l'insertion dans la base.
Si je mets :
Code :
|
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);
Marsh Posté le 02-08-2005 à 14:22:12
cemoi58 a écrit : Voilà, j'ai ré-essayer mais j'ai toujours des problèmes lors de l'insertion dans la base.
|
C'est chiant: ca fait une journée maintenant que je suis sur ce problème...
Marsh Posté le 02-08-2005 à 14:42:19
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
Marsh Posté le 02-08-2005 à 14:49:03
- 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 ?
Marsh Posté le 02-08-2005 à 15:05:33
et surtout, utilise des PreparedStatement et te fais pas chier avec ca, apres tu fais un setDate(..) de ton objet, et ca roule
Marsh Posté le 02-08-2005 à 15:06:44
sircam a écrit : - Attention à ton masque : HH -> Hour of day (1-12) |
Ca y est: j'ai trouvé!!!!!!
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 :
|
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é!
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!
Marsh Posté le 02-08-2005 à 15:10:01
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 |
Vi mais c'est interressant aussi de savoir pourquoi ca déconne...
Marsh Posté le 02-08-2005 à 08:28:31
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
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 :
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.
Pouvez-vous m'aider s'il vous plééééééé!!!