konvertieren XMLGregorianCalendar java.sql.Timestamp
Ich versuche zum zuweisen eines XMLGregorianCalendar-date zu java.sql.Timestamp var, so...
var1.setTimeStamp(Timestamp.valueOf(var2.getXMLGregorianCalendar().toString()))
Aber offensichtlich ist dies nicht funktioniert, und wirft eine Ausnahme...
java.lang.IllegalArgumentException: Timestamp-format muss yyyy-mm-dd hh:mm:ss[.fffffffff]
Und ich habe versucht, diese, wie auch:
var1.setTimeStamp((Timestamp) var2.getXMLGregorianCalendar().getTime())
aber...
java.lang.Classcastexception-Fehler: java.util.Datum kann nicht Stimmen, um java.sql.Timestamp
Irgendwelche Ideen..? Danke!
InformationsquelleAutor elcadro | 2012-09-20
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich die Antwort gefunden:
tl;dr
Versuchen zu vermeiden, legacy-Datum-Zeit-Klassen. Aber wenn Linkshänder eine
javax.xml.datatype.XMLGregorianCalendar
konvertieren zu modernenjava.time.Instant
Klasse. Keine Notwendigkeit, immer verwendenjava.sql.Timestamp
.Abrufen aus einer Datenbank, wie von JDBC 4.2 und später.
java.Zeit
FYI, die furchtbar lästig alten Datum-Zeit-Klassen wurden verdrängt durch die java.Zeit Klassen.
javax.xml.datatype.XMLGregorianCalendar
wird ersetzt durchjava.Zeit.ZonedDateTime
.java.util.GregorianCalendar
wird ersetzt durchjava.Zeit.ZonedDateTime
. Hinweis: neue Konvertierungen Methoden Hinzugefügt, um die alte Klasse.java.sql.Timestamp
wird ersetzt durchjava.time.Instant
beide repräsentieren einen moment in UTC mit einer Auflösung von Nanosekunden.Vermeiden Sie die Verwendung
XMLGregorianCalendar
. Aber wenn müssen Sie die Schnittstelle mit dem alten code noch nicht aktualisiert für java.Zeit Datentypen konvertieren. Als Zwischenschritt zu konvertierenGregorianCalendar
wie man im code Ihrer Frage.Jetzt verwenden Sie die neue bequeme Konvertierung-Methode Hinzugefügt, um die alten
GregorianCalendar
Klasse, um eine modernejava.time.ZonedDateTime
Objekt.Einstellen, dass bestimmte Zeitzone zu UTC. Extrahieren einer
Instant
Objekt, das ist ein moment der immer in UTC, per definition.Als der JDBC 4.2, wir können direkt von exchange - java.Zeit Objekte mit der Datenbank. So dass keine Notwendigkeit, um überhaupt berühren
java.sql.Timestamp
wieder.Abruf:
Über java.Zeit
Den java.Zeit framework ist in Java 8 und höher. Diese Klassen verdrängen die lästige alte legacy Datum-Zeit-Klassen wie
java.util.Date
,Calendar
, &" = SimpleDateFormat
.Den Joda-Time Projekt, jetzt in Wartung-Modus, rät der migration auf die java.Zeit Klassen.
Um mehr zu erfahren, siehe die Oracle Tutorial. Und die Suche Stack Overflow für viele Beispiele und Erklärungen. Spezifikation JSR 310.
Können Sie exchange java.Zeit Objekte direkt mit Ihrer Datenbank. Verwenden Sie eine JDBC-Treiber kompatibel mit JDBC 4.2 oder später. Keine Notwendigkeit für Streicher, keine Notwendigkeit für
java.sql.*
Klassen.Wo erhalten Sie die java.Zeit-Klassen?
Den ThreeTen-Extra Projekt erweitert die java.mal mit zusätzlicher Klassen. Dieses Projekt ist ein Testgelände für mögliche künftige Erweiterungen zu java.Zeit. Sie finden möglicherweise einige nützliche Klassen, die hier wie
Interval
,YearWeek
,YearQuarter
, und mehr.XMLGregorianCalendar
zujava.sql.Timestamp
Klassen .Der andere fragt über einen Zeit-zone Diskrepanz in diesem Prozess. Meine andere Antwort gibt zusätzliche Hinweise über die Arbeit mit UTC um solche Verwechslungen zu vermeiden. Meine andere Antwort lässt einige details und Kommentare, bezieht sich auf diese Antwort für weitere Informationen.