Ich versuche, a java.util.Date
als Eingabe zu verwenden und dann eine Abfrage damit zu erstellen - also brauche ich a java.sql.Date
.
Ich war überrascht, dass die Konvertierung nicht implizit oder explizit durchgeführt werden konnte - aber ich weiß nicht einmal, wie ich das tun würde, da die Java-API für mich noch ziemlich neu ist.
import java.sql.*
in meinem Code, die java.util.date zwingende und somit Probleme verursachen , wenn Datumswerte zuweisen, mit dem letzteren waren in Ordnung , aber nicht die ersten. HTHDATE
bedeutet dies nur Datum.Antworten:
tl; dr
Tu es nicht. Beide Klassen sind veraltet.
java.util.Date
&java.sql.Date
mit JDBC 4.2 oder höher.Beispielabfrage mit
PreparedStatement
.Ersatz:
Instant
anstelle vonjava.util.Date
Beide stellen einen Moment in UTC dar. aber jetzt mit Nanosekunden statt Millisekunden.
LocalDate
anstelle vonjava.sql.Date
Beide stellen einen Nur-Datum-Wert ohne Tageszeit und ohne Zeitzone dar.
Einzelheiten
Wenn Sie versuchen, mit Nur-Datum-Werten (keine Uhrzeit, keine Zeitzone) zu arbeiten, verwenden Sie die
LocalDate
Klasse anstelle vonjava.util.Date
.java.time
In Java 8 und höher wurden die problematischen alten Datums- / Uhrzeitklassen, die mit früheren Versionen von Java gebündelt wurden, durch das neue Paket java.time ersetzt . Siehe Oracle Tutorial . Ein Großteil der Funktionen wurde in ThreeTen-Backport auf Java 6 & 7 zurückportiert und in ThreeTenABP weiter an Android angepasst .
Ein SQL-Datentyp
DATE
soll nur ein Datum ohne Tageszeit und ohne Zeitzone sein. Java hatte bis genaujava.time.LocalDate
in Java 8 nie genau eine solche Klasse †. Erstellen wir einen solchen Wert, indem wir das heutige Datum nach einer bestimmten Zeitzone abrufen (die Zeitzone ist wichtig, um ein Datum zu bestimmen, wenn ein neuer Tag in Paris früher als in Montréal beginnt, z Beispiel).An diesem Punkt können wir fertig sein. Wenn Ihr JDBC-Treiber der JDBC 4.2-Spezifikation entspricht , sollten Sie in der Lage sein, ein
LocalDate
ViasetObject
an einPreparedStatement
zu übergeben, um es in einem SQL DATE-Feld zu speichern.Verwenden Sie
ResultSet::getObject
diese Option auch, um von einer SQL DATE-Spalte in ein Java-LocalDate
Objekt abzurufen . Wenn Sie die Klasse im zweiten Argument angeben, ist Ihr Code typsicher .Mit anderen Worten, diese gesamte Frage ist unter JDBC 4.2 oder höher irrelevant .
Wenn Ihr JDBC-Treiber nicht auf diese Weise funktioniert, müssen Sie auf die Konvertierung in die Typen java.sql zurückgreifen.
In java.sql.Date konvertieren
Verwenden Sie zum Konvertieren neue Methoden, die den alten Datums- / Zeitklassen hinzugefügt wurden. Wir können anrufen
java.sql.Date.valueOf(…)
, um a zu konvertierenLocalDate
.Und in die andere Richtung gehen.
Konvertieren von
java.util.Date
Während Sie die Verwendung der alten Datums- / Uhrzeitklassen vermeiden sollten, müssen Sie möglicherweise gezwungen sein, mit vorhandenem Code zu arbeiten. In diesem Fall können Sie nach / von java.time konvertieren.
Gehen Sie die
Instant
Klasse durch, die einen Moment auf der Zeitachse in UTC darstellt. AnInstant
ist in der Idee ähnlich wie ajava.util.Date
. Beachten Sie jedoch, dassInstant
die Auflösung bis zu Nanosekunden undjava.util.Date
die Auflösung nur Millisekunden beträgt.Verwenden Sie zum Konvertieren neue Methoden, die den alten Klassen hinzugefügt wurden. Zum Beispiel
java.util.Date.from( Instant )
undjava.util.Date::toInstant
.Um ein Datum zu bestimmen, benötigen wir den Kontext einer Zeitzone. Für jeden Moment variiert das Datum weltweit nach Zeitzone. Wenden Sie ein
ZoneId
an, um ein zu erhaltenZonedDateTime
.† Die java.sql.Date Klasse gibt vor , ohne Zeit-of-day date-nur zu sein , aber tatsächlich hat eine Laufzeit-Tag, zu einer Mitternacht Zeit angepasst. Verwirrend? Ja, die alten Datums- und Uhrzeitklassen sind ein Chaos.
Über java.time
Das java.time- Framework ist in Java 8 und höher integriert. Diese Klassen verdrängen die lästigen alten Legacy - Datum-Zeit - Klassen wie
java.util.Date
,Calendar
, &SimpleDateFormat
.Das Joda-Time- Projekt, das sich jetzt im Wartungsmodus befindet , empfiehlt die Migration zu den Klassen java.time .
Weitere Informationen finden Sie im Oracle-Lernprogramm . Suchen Sie im Stapelüberlauf nach vielen Beispielen und Erklärungen. Die Spezifikation ist JSR 310 .
Sie können java.time- Objekte direkt mit Ihrer Datenbank austauschen . Verwenden Sie einen JDBC-Treiber, der mit JDBC 4.2 oder höher kompatibel ist . Keine Notwendigkeit für Zeichenfolgen, keine Notwendigkeit für
java.sql.*
Klassen.Woher bekomme ich die java.time-Klassen?
Das ThreeTen-Extra- Projekt erweitert java.time um zusätzliche Klassen. Dieses Projekt ist ein Testfeld für mögliche zukünftige Ergänzungen von java.time. Sie können einige nützliche Klassen hier wie finden
Interval
,YearWeek
,YearQuarter
, und mehr .quelle
Keine Ursache....
erklärt es. Der Link lautet http://www.java2s.com/Tutorial/Java/0040__Data-Type/ConvertfromajavautilDateObjecttoajavasqlDateObject.htm
quelle
epochseconds
dh Millisekunden danach zurück1,JAN,1970
. Aber was ist, wenn wir das Datum einer Person vor diesem Datum speichern wollen ... oder so ähnlich0000-00-00 as default
Bei der anderen Antwort haben Sie möglicherweise Probleme mit den Zeitinformationen (vergleichen Sie die Daten mit unerwarteten Ergebnissen!)
Ich schlage vor:
quelle
java.util.Date
,java.util.Calendar
undjava.text.SimpleDateFormat
sind jetzt Erbe , durch die verdrängte java.time Klassen in Java gebaut 8 und höher. Siehe Tutorial von Oracle .Diese Funktion gibt ein konvertiertes SQL-Datum vom Java-Datumsobjekt zurück.
quelle
Das Konvertieren
java.util.Data
injava.sql.Data
verliert Stunde, Minute und Sekunde. Wenn es also möglich ist, schlage ich vor, dass Sie Folgendes verwendenjava.sql.Timestamp
:Für weitere Informationen können Sie diese Frage überprüfen .
quelle
In meinem Fall, in dem das Datum aus JXDatePicker (Java-Kalender) ausgewählt und als SQL-Datumstyp in der Datenbank gespeichert wird, funktioniert das unten einwandfrei.
java.sql.Date date = new java.sql.Date(pickedDate.getDate().getTime());
Dabei ist pickDate ein Objekt von JXDatePicker
quelle
Diese Funktion gibt ein konvertiertes SQL-Datum vom Java-Datumsobjekt zurück.
quelle
Formatieren Sie zuerst Ihr java.util.Date. Verwenden Sie dann das formatierte Datum, um das Datum in java.sql.Date abzurufen
quelle
Hier ist das Beispiel der Konvertierung von Util Date in SQL Date und ya dies ist ein Beispiel, das ich in meinem Projekt verwende, könnte auch für Sie hilfreich sein.
quelle
Ich bin ein Neuling: Nach langem Herumlaufen hat das geklappt. Gedanken könnten nützlich sein
quelle
java.util.Date
,java.util.Calendar
undjava.text.SimpleDateFormat
sind jetzt Erbe , durch die verdrängte java.time Klassen in Java gebaut 8 und höher. Siehe Tutorial von Oracle .Hier ist javaDate die Instanz von java.util.Date
quelle
Methode zum Vergleichen von 2 Daten (util.date oder sql.date)
quelle
versuche es damit
quelle
Ich denke, der beste Weg, um zu konvertieren, ist:
Wenn Sie die
dt
Variable in eine SQL-Tabelle einfügen möchten, haben Sie folgende Möglichkeiten:quelle
Ich benutze den folgenden Code, bitte probieren Sie es aus
Geben Sie beispielsweise das Format des gewünschten Datums an
"DD-MM_YYYY"
oder verwenden Sie'YYYY-mm-dd'
dann den Datentyp Java-Datum alsdann wird Ihr Datum analysiert
quelle
Mit dieser Methode können Sie das Util-Datum in das SQL-Datum konvertieren.
quelle
Ich habe die folgende Codierung ausprobiert, die gut funktioniert hat.
quelle
Wenn Sie MySQL verwenden, kann einer Datumsspalte eine Zeichenfolgendarstellung dieses Datums übergeben werden
Also benutze ich die DateFormatter-Klasse, um sie zu formatieren und dann als String in der SQL-Anweisung oder der vorbereiteten Anweisung festzulegen
Hier ist die Code-Abbildung:
String date = converUtilDateToSqlDate (otherTransaction.getTransDate ());
// Übergebe dann dieses Datum in deiner SQL-Anweisung
quelle