111 Stimmen

Java Timestamp - Wie kann ich einen Zeitstempel mit dem Datum 23/09/2007 erstellen?

Wie kann ich einen Zeitstempel mit dem Datum 23/09/2007 erstellen?

162voto

Adam Paynter Punkte 45274

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);

135voto

pigouina Punkte 2387

Und was ist damit?

java.sql.Timestamp timestamp = java.sql.Timestamp.valueOf("2007-09-23 10:10:10.0");

18voto

Matthew Flaschen Punkte 266507

Was meinen Sie mit Zeitstempel? Wenn Sie Millisekunden seit der Unix-Epoche meinen:

GregorianCalendar cal = new GregorianCalendar(2007, 9 - 1, 23);
long millis = cal.getTimeInMillis();

Wenn Sie ein aktuelles java.sql.Timestamp-Objekt benötigen:

Timestamp ts = new Timestamp(millis);

14voto

Basil Bourque Punkte 256611

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?

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 .

6voto

Alex Punkte 7732

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());

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X