Wie kann ich einen Zeitstempel mit dem Datum 23/09/2007 erstellen?
100
Mit Timestamp
, ich nehme an, du meinst java.sql.Timestamp
. Sie werden feststellen, dass diese Klasse einen Konstruktor hat, der ein long
Argument akzeptiert . Sie können dies mit der DateFormat
Klasse analysieren :
DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
Date date = dateFormat.parse("23/09/2007");
long time = date.getTime();
new Timestamp(time);
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 .Was ist damit?
quelle
Was meinst du mit Zeitstempel? Wenn Sie Millisekunden seit der Unix-Epoche meinen:
Wenn Sie ein aktuelles java.sql.Timestamp-Objekt möchten:
quelle
Calendar.SEPTEMBER
tl; dr
java.time
Aktualisieren wir diese Seite, indem wir Code mit dem in Java 8 und höher integrierten java.time- Framework anzeigen .
Diese neuen Klassen sind von Joda-Time inspiriert , definiert durch JSR 310 und erweitert durch das ThreeTen-Extra- Projekt. Sie ersetzen die notorisch lästigen alten Datums- und Uhrzeitklassen, die mit frühen Java-Versionen gebündelt sind.
In java.time
Instant
ist ein Moment auf der Timeline in UTC. AZonedDateTime
ist ein Moment, der in eine Zeitzone (ZoneId
) eingestellt ist.Die Zeitzone ist hier entscheidend. Ein Datum von
September 23, 2007
kann nicht in einen Moment auf der Zeitachse übersetzt werden, ohne eine Zeitzone anzuwenden. Bedenken Sie, dass in Paris früher ein neuer Tag beginnt als in Montréal, wo es noch „gestern“ ist.Außerdem repräsentiert ein java.sql.Timestamp sowohl ein Datum als auch eine Uhrzeit. Wir müssen also eine Tageszeit angeben, die dem Datum entspricht. Wir gehen davon aus, dass Sie den ersten Moment des Tages als Tageszeit wünschen. Beachten Sie, dass dies
00:00:00.0
aufgrund der Sommerzeit und möglicherweise anderer Anomalien nicht immer die richtige Zeit ist.Beachten Sie, dass die java.time-Typen im Gegensatz zur alten Klasse java.util.Date und im Gegensatz zu Joda-Time eine Auflösung von Nanosekunden anstelle von Millisekunden haben. Dies entspricht der Auflösung von java.sql.Timestamp.
Beachten Sie, dass der java.sql.Timestamp die unangenehme Angewohnheit hat, die aktuelle Standardzeitzone Ihrer JVM implizit auf ihren Datums- / Uhrzeitwert anzuwenden, wenn eine Zeichenfolgendarstellung über ihre
toString
Methode generiert wird. Hier sehen Sie meineAmerica/Los_Angeles
Zeitzone angewendet. Im Gegensatz dazu sind die java.time-Klassen mit den Standardformaten ISO 8601 vernünftiger .Dump zur Konsole.
Beim Ausführen.
Ab JDBC 4.2 können Sie übrigens die Typen java.time direkt verwenden. Keine Notwendigkeit für
java.sql.Timestamp
.PreparedStatement.setObject
ResultSet.getObject
Ü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
Sie können auch Folgendes tun:
quelle
Laut API ist der Konstruktor, der Jahr, Monat usw. akzeptiert, veraltet. Stattdessen sollten Sie den Konstruktor verwenden, der eine lange akzeptiert. Sie können eine Kalenderimplementierung verwenden , um das gewünschte Datum zu erstellen und auf die Zeitdarstellung als Long zuzugreifen, beispielsweise mit der Methode getTimeInMillis .
quelle
Der Vollständigkeit halber auch eine Lösung mit Joda-Time Version 2.5 und seiner
DateTime
Klasse:quelle
DateTime
Objekt angewendet . Das bedeutet, dass Ihre Ergebnisse auf verschiedenen Computern oder in der Konfiguration des Host-Betriebssystems oder der JVM-Einstellungen variieren . Übergeben Sie für vorhersagbare Ergebnisse eine Zeitzone an diesenDateTime
Konstruktor. Wählen Sie den richtigen Zeitzonennamen für Ihre Absicht. Zum BeispielDateTimeZone.forID( "America/Montreal" )
oderDateTimeZone.UTC
.DateTime
Objekt einfach nach seiner Millisekunden seit der Epoche. Ersetzen.toDate().getTime()
durch.getMillis()
.DateTimeZone.getDefault()
indem Sie das Ergebnis aufrufen und als optionales Argument übergeben. (Übrigens auch für dasLocale.getDefault()
gleiche Problem über die Mehrdeutigkeit optionaler Argumente.)Eine allgemeinere Antwort wäre der Import
java.util.Date
. Wenn Sie dann eintimestamp
gleiches Datum festlegen müssen, setzen Sie es einfach gleichnew Date()
.quelle