convertir XMLGregorianCalendar à java.sql.Timestamp
Je suis en train d'affecter un XMLGregorianCalendar date en java.sql.Timestamp var, c'est comme ça...
var1.setTimeStamp(Timestamp.valueOf(var2.getXMLGregorianCalendar().toString()))
Mais apparemment, ce n'est pas de travail, et déclenche une exception...
java.lang.IllegalArgumentException: format d'Horodatage doit être aaaa-mm-jj hh:mm:ss[.fffffffff]
Et j'ai essayé cela, ainsi:
var1.setTimeStamp((Timestamp) var2.getXMLGregorianCalendar().getTime())
mais...
java.lang.ClassCastException: java.util.La Date ne peut pas être lancé à java.sql.Timestamp
Toutes les idées..? Merci!
OriginalL'auteur elcadro | 2012-09-20
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé la réponse:
OriginalL'auteur elcadro
tl;dr
Essayer d'éviter l'héritage de date-heure classes. Mais si remis un
javax.xml.datatype.XMLGregorianCalendar
, convertir modernejava.time.Instant
classe. Pas besoin de toujours utiliserjava.sql.Timestamp
.La récupération à partir d'une base de données, comme des JDBC 4.2 et plus tard.
java.temps
Pour info, le terriblement gênant vieille date-heure classes ont été supplanté par le java.temps classes.
javax.xml.type de données.XMLGregorianCalendar
est remplacé parjava.temps.ZonedDateTime
.java.util.GregorianCalendar
est remplacé parjava.temps.ZonedDateTime
. Note de nouvelles conversions les méthodes ajoutées à la vieille classe.java.sql.Timestamp
est remplacé parjava.time.Instant
, à la fois représentant d'un moment à l'UTC avec une résolution de nanosecondes.Éviter d'utiliser
XMLGregorianCalendar
. Mais si vous devez en interface avec l'ancien code pas encore mis à jour pour java.temps types, convertir. Comme une étape intermédiaire, convertirGregorianCalendar
comme on le voit dans le code de votre Question.Maintenant utiliser la nouvelle pratique de conversion ajout de la méthode à l'ancienne
GregorianCalendar
classe, pour obtenir un modernejava.time.ZonedDateTime
objet.Ajuster à partir de ce moment particulier de la zone de UTC. Extrait d'un
Instantané
objet qui est un moment toujours en UTC, par définition.De JDBC 4.2, nous pouvons échanger directement des java.temps objets avec la base de données. Donc pas besoin de ne jamais toucher
java.sql.Timestamp
de nouveau.De l'extraction:
Sur java.temps
La java.temps cadre est intégré dans Java 8 et les versions ultérieures. Ces classes permettent d'éviter la pénible vieux héritage date du temps des classes comme
java.util.Date
,Agenda
, &SimpleDateFormat
.La Joda-Time projet, maintenant dans le mode de maintenance, conseille la migration vers le java.le temps classes.
Pour en savoir plus, consultez les Oracle Tutoriel. Et de recherche de Débordement de Pile pour de nombreux exemples et des explications. La spécification est JSR 310.
Vous pouvez échanger java.temps objets directement avec votre base de données. Utiliser un Pilote JDBC compatible avec JDBC 4.2 ou plus tard. Pas besoin de chaînes, pas besoin de
java.sql.*
classes.Où obtenir le java.les classes de temps?
La ThreeTen-Extra projet s'étend java.temps avec d'autres classes. Ce projet est un terrain d'essai pour de possibles futurs ajouts à java.temps. Vous pouvez trouver quelques classes utiles ici comme
Intervalle
,YearWeek
,YearQuarter
, et plus.J'avais envisagé de marquage de cette Question et de l'autre Question du même auteur comme des doublons. Mais ils ne sont pas des doublons. Celui-ci lui demande simplement d'aller de la
XMLGregorianCalendar
àjava.sql.Timestamp
classes .L'autre demande au sujet de la zone de divergence dans ce processus. Mon Réponse donne des conseils sur le travail avec l'UTC pour éviter une telle confusion. Mon autre réponse, laisse de côté certains détails et commentaires, en se référant à cette Réponse pour plus d'info.OriginalL'auteur Basil Bourque