Wie kann ich einen Zeitstempel mit dem Datum 23/09/2007 erstellen?
Antworten
Zu viele Anzeigen?Par Timestamp
Ich nehme an, Sie meinen java.sql.Timestamp
. Sie werden feststellen, dass diese Klasse einen Konstruktor hat, der eine long
Argument. Sie können dies mit der Funktion DateFormat
Klasse:
DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
Date date = dateFormat.parse("23/09/2007");
long time = date.getTime();
new Timestamp(time);
Tl;dr
java.sql.Timestamp.from (
LocalDate.of ( 2007 , 9 , 23 )
.atStartOfDay( ZoneId.of ( "America/Montreal" ) )
.toInstant()
)
java.time
Aktualisieren wir diese Seite, indem wir den Code mit der java.time Framework, das in Java 8 und höher integriert ist.
Diese neuen Klassen sind inspiriert von Joda-Time definiert durch JSR 310 und erweitert um die DreiZehn-Extra Projekt. Sie ersetzen die notorisch lästigen alten Datums-Zeit-Klassen, die mit frühen Versionen von Java gebündelt wurden.
In java.time wird ein Instant
ist ein Zeitpunkt auf der Zeitachse in UTC. A ZonedDateTime
ist ein auf eine Zeitzone eingestellter Instant ( ZoneId
).
Die Zeitzone ist hier entscheidend. Ein Datum von September 23, 2007
kann nicht in einen Zeitpunkt auf der Zeitachse übersetzt werden, ohne dass eine Zeitzone angewendet wird. Ein neuer Tag bricht in Paris früher an als in Montréal, wo es noch "gestern" ist.
Außerdem stellt ein java.sql.Timestamp sowohl ein Datum als auch eine Tageszeit dar. Wir müssen also eine Tageszeit zusammen mit dem Datum einfügen. Wir gehen davon aus, dass Sie den ersten Moment des Tages als Uhrzeit angeben wollen. Beachten Sie, dass dies nicht immer die Uhrzeit ist 00:00:00.0
wegen der Sommerzeit und möglicherweise anderer Anomalien.
Beachten Sie, dass im Gegensatz zur alten java.util.Date-Klasse und im Gegensatz zu Joda-Time die java.time-Typen eine Auflösung von Nanosekunden und nicht von Millisekunden haben. Dies entspricht der Auflösung von java.sql.Timestamp.
Beachten Sie, dass java.sql.Timestamp die unangenehme Angewohnheit hat, implizit die aktuelle Standardzeitzone Ihrer JVM auf seinen Datums-/Zeitwert anzuwenden, wenn es eine String-Darstellung über seine toString
Methode. Hier sehen Sie meine America/Los_Angeles
Zeitzone angewendet. Im Gegensatz dazu sind die java.time-Klassen vernünftiger und verwenden Standard ISO 8601 Formate.
LocalDate d = LocalDate.of ( 2007 , 9 , 23 ) ;
ZoneId z = ZoneId.of ( "America/Montreal" ) ;
ZonedDateTime zdt = d.atStartOfDay( z ) ;
Instant instant = zdt.toInstant() ;
java.sql.Timestamp ts = java.sql.Timestamp.from ( instant ) ;
Dump auf die Konsole.
System.out.println ( "d: " + d + " = zdt: " + zdt + " = instant: " + instant + " = ts: " + ts );
Wenn ausgeführt.
d: 2007-09-23 = zdt: 2007-09-23T00:00-04:00[Amerika/Montreal] = instant: 2007-09-23T04:00:00Z = ts: 2007-09-22 21:00:00.0
Übrigens, ab JDBC 4.2 können Sie die java.time-Typen direkt verwenden. Keine Notwendigkeit für java.sql.Timestamp
.
PreparedStatement.setObject
ResultSet.getObject
Über java.time
En java.time Framework ist in Java 8 und höher integriert. Diese Klassen verdrängen die lästigen alten Erbe Datum-Zeit-Klassen wie java.util.Date
, Calendar
, & SimpleDateFormat
.
En Joda-Time Projekt, jetzt in Wartungsmodus rät zur Migration auf den java.time Klassen.
Weitere Informationen finden Sie in der Oracle-Tutorial . Und suchen Sie auf Stack Overflow nach vielen Beispielen und Erklärungen. Spezifikation ist JSR 310 .
Sie können umtauschen java.time Objekte direkt mit Ihrer Datenbank. Verwenden Sie eine JDBC-Treiber übereinstimmend mit JDBC 4.2 oder später. Keine Notwendigkeit für Strings, keine Notwendigkeit für java.sql.*
Klassen.
Wo erhält man die java.time-Klassen?
- Java SE 8 , Java SE 9 , Java SE 10 , Java SE 11 und später - Teil der Standard-Java-API mit einer gebündelten Implementierung.
- Java 9 fügt einige kleinere Funktionen und Korrekturen hinzu.
- Java SE 6 y Java SE 7
- のほとんどが java.time Funktionalität wird in Java 6 & 7 zurückportiert in DreiZehn-Backport .
- Android
- Spätere Versionen von Android bündeln Implementierungen der java.time Klassen.
- Bei älteren Android-Betriebssystemen (<26) ist die DreiZehnABP Projekt passt sich an DreiZehn-Backport (siehe oben). Siehe Wie benutzt man ThreeTenABP .
En DreiZehn-Extra Projekt erweitert java.time um zusätzliche Klassen. Dieses Projekt dient als Versuchsfeld für mögliche zukünftige Erweiterungen von java.time. Sie finden hier vielleicht einige nützliche Klassen wie Interval
, YearWeek
, YearQuarter
et mehr .
Sie könnten auch Folgendes tun:
// untested
Calendar cal = GregorianCalendar.getInstance();
cal.set(Calendar.DAY_OF_MONTH, 23);// I might have the wrong Calendar constant...
cal.set(Calendar.MONTH, 8);// -1 as month is zero-based
cal.set(Calendar.YEAR, 2009);
Timestamp tstamp = new Timestamp(cal.getTimeInMillis());
- See previous answers
- Weitere Antworten anzeigen