Dies hat mir geholfen und ich habe einige Änderungen vorgenommen, damit ich nicht importieren muss new java.text.SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(new java.util.Date())
Pini Cheyni
Besser new SimpleDateFormat("yyyy.MM.dd HH:mm:ss").format(new Date());
Zon
36
tl; dr
Verwenden Sie nur moderne java.time- Klassen. Verwenden Sie niemals die schreckliche Erbe Klassen wie SimpleDateFormat, Dateoder java.sql.Timestamp.
ZonedDateTime// Represent a moment as perceived in the wall-clock time used by the people of a particular region ( a time zone)..now(// Capture the current moment.ZoneId.of("Africa/Tunis")// Specify the time zone using proper Continent/Region name. Never use 3-4 character pseudo-zones such as PDT, EST, IST. )// Returns a `ZonedDateTime` object. .format(// Generate a `String` object containing text representing the value of our date-time object. DateTimeFormatter.ofPattern("uuuu.MM.dd.HH.mm.ss"))// Returns a `String`.
Oder verwenden Sie die aktuelle Standardzeitzone der JVM .
Verwenden Sie java.sql nur für Treiber vor JDBC 4.2
Wenn Ihr JDBC-Treiber für die Unterstützung von java.time- Typen noch nicht mit JDBC 4.2 kompatibel ist , müssen Sie auf die Verwendung der java.sql-Klassen zurückgreifen.
Daten speichern.
OffsetDateTime odt =OffsetDateTime.now(ZoneOffset.UTC );// Capture the current moment in UTC.
myPreparedStatement.setObject(…, odt );
Die Typen java.sql, z. B. java.sql.Timestamp, sollten nur für die Übertragung in und aus der Datenbank verwendet werden. Konvertieren Sie sofort in java.time-Typen in Java 8 und höher.
java.time.Instant
A java.sql.Timestampabbildet ein java.time.Instant, einen Moment auf der Timeline in UTC. Beachten Sie die neue Konvertierungsmethode toInstant, die der alten Klasse hinzugefügt wurde.
Verwenden Sie a DateTimeFormatter, um Ihre Zeichenfolge zu generieren. Die Mustercodes ähneln denen von, sind java.text.SimpleDateFormatjedoch nicht genau. Lesen Sie das Dokument daher sorgfältig durch.
Dieses spezielle Format ist hinsichtlich seiner genauen Bedeutung nicht eindeutig, da es keinen Hinweis auf einen Versatz von UTC oder Zeitzone gibt.
ISO 8601
Wenn Sie in dieser Angelegenheit mitreden können, empfehlen wir Ihnen, Standardformate nach ISO 8601 zu verwenden, anstatt Ihre eigenen zu rollen. Das Standardformat ist Ihrem sehr ähnlich. Zum Beispiel : 2016-02-20T03:26:32+05:30.
Die java.time-Klassen verwenden standardmäßig diese Standardformate, sodass kein Muster angegeben werden muss. Die ZonedDateTimeKlasse erweitert das Standardformat durch Anhängen des Namens der Zeitzone (eine sinnvolle Verbesserung).
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.
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 .
Was ist also der richtige Weg, um den aktuellen Zeitstempel für die Wanduhr im Format "JJJJ.MM.Td.HH.mm.ss" zu erhalten? Ohne explizit die fest codierte Zeichenfolge meiner lokalen Zeitzone anzugeben? Das war es, was der Starter des Themas fragte, und ich konnte es in Ihrer Antwort nicht finden ...
t7ko
@ t7ko Ich habe dem Abschnitt tl; dr eine Zeile mit Beispielcode hinzugefügt, die zeigt, wie explizit nach der aktuellen Standardzeitzone der JVM gefragt wird. Das Aufrufen von "now ()" ohne Argumente bewirkt dasselbe, ist jedoch nicht klar, ob Sie die Standardeinstellung verwenden wollten oder ob Sie das entscheidende Problem der Zeitzone ignoriert oder vergessen haben.
Basil Bourque
32
Sie können java.util.Date anstelle von Timestamp verwenden:
Ein geeigneterer Ansatz besteht darin, eine Gebietsschema-Region als Parameter im Konstruktor anzugeben. Im folgenden Beispiel wird eine Region mit US-Gebietsschema verwendet. Die Datumsformatierung ist vom Gebietsschema abhängig und verwendet das Gebietsschema, um Informationen in Bezug auf die Gepflogenheiten und Konventionen der Region des Benutzers anzupassen. Gebietsschema (Java Platform SE 7)
Keine "Gebietsschema-Zone". Ich vermute, Sie sind verwirrend Localeund Zeitzone, die nichts miteinander zu tun haben. Localesteuert die kulturellen Normen für die Formatierung und die menschliche Sprache, die für den Namen des Monats / Tages verwendet wird. Die Zeitzone stellt das Datum-Zeit - Darstellung , um einige Region angemessen zu sein Wandtaktzeit . Im Fall dieser Frage ist das Gebietsschema irrelevant, da es keine Formatierungsprobleme gibt, mit denen kulturelle Normen angewendet werden können, und es gibt keine Namen für Monat / Tag, die für eine bestimmte menschliche Sprache lokalisiert werden könnten.
Basil Bourque
@BasilBourque Vielen Dank für Ihre Eingabe. Ich habe die Antwort aktualisiert, um expliziter zu sein
user3144836
4
Sie können Folgendes verwenden
new java.sql.Timestamp(System.currentTimeMillis()).getTime()Result:1539594988651
Hoffe das wird helfen. Nur mein Vorschlag und nicht für Belohnungspunkte.
Es hat nicht das gewünschte Zeichenfolgenformat. Ich befürchte auch, dass das einzige, was zu ein paar ähnlichen Antworten beiträgt, unnötige Komplikationen sind…
Ole VV
4
Verwenden Sie moderne java.timeKlassen, wenn Sie Java 8 oder höher verwenden.
String s =DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.now());
Basil Bourques Antwort ist ziemlich gut. Aber es ist zu lang. Viele Menschen hätten keine Geduld, es zu lesen. Die Top 3 Antworten sind zu alt und können Java New Bee irreführen. Deshalb biete ich diese kurze und moderne Antwort für neue Entwickler. Hoffe, diese Antwort kann die Verwendung von schrecklichen reduzieren SimpleDateFormat.
SimpleDateFormat
undjava.sql.Timestamp
sind jetzt Legacy , ersetzt durch die in Java 8 und höher integrierten java.time- Klassen. Siehe Tutorial von Oracle .Antworten:
Ersetzen
mit
weil es keinen Standardkonstruktor für
Timestamp
gibt oder Sie dies mit der Methode tun können:quelle
java.util.Date
undjava.sql.Timestamp
sind jetzt Legacy , ersetzt durch die in Java 8 und höher integrierten java.time- Klassen. Siehe Tutorial von Oracle .Verwenden Sie
java.util.Date
Klasse anstelle von Zeitstempel.Dadurch erhalten Sie das aktuelle Datum in dem angegebenen Format.
quelle
new java.text.SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(new java.util.Date())
new SimpleDateFormat("yyyy.MM.dd HH:mm:ss").format(new Date())
;tl; dr
Verwenden Sie nur moderne java.time- Klassen. Verwenden Sie niemals die schreckliche Erbe Klassen wie
SimpleDateFormat
,Date
oderjava.sql.Timestamp
.Oder verwenden Sie die aktuelle Standardzeitzone der JVM .
java.time & JDBC 4.2
Der moderne Ansatz verwendet die oben gezeigten Klassen java.time .
Wenn Ihr JDBC-Treiber mit JDBC 4.2 kompatibel ist , können Sie java.time- Objekte direkt mit der Datenbank austauschen . Verwenden Sie
PreparedStatement::setObject
undResultSet::getObject
.Verwenden Sie java.sql nur für Treiber vor JDBC 4.2
Wenn Ihr JDBC-Treiber für die Unterstützung von java.time- Typen noch nicht mit JDBC 4.2 kompatibel ist , müssen Sie auf die Verwendung der java.sql-Klassen zurückgreifen.
Daten speichern.
Daten abrufen.
Die Typen java.sql, z. B.
java.sql.Timestamp
, sollten nur für die Übertragung in und aus der Datenbank verwendet werden. Konvertieren Sie sofort in java.time-Typen in Java 8 und höher.java.time.Instant
A
java.sql.Timestamp
abbildet einjava.time.Instant
, einen Moment auf der Timeline in UTC. Beachten Sie die neue KonvertierungsmethodetoInstant
, die der alten Klasse hinzugefügt wurde.Zeitzone
Wenden Sie die gewünschte / erwartete Zeitzone (
ZoneId
) an, um a zu erhaltenZonedDateTime
.Formatierte Zeichenfolgen
Verwenden Sie a
DateTimeFormatter
, um Ihre Zeichenfolge zu generieren. Die Mustercodes ähneln denen von, sindjava.text.SimpleDateFormat
jedoch nicht genau. Lesen Sie das Dokument daher sorgfältig durch.Dieses spezielle Format ist hinsichtlich seiner genauen Bedeutung nicht eindeutig, da es keinen Hinweis auf einen Versatz von UTC oder Zeitzone gibt.
ISO 8601
Wenn Sie in dieser Angelegenheit mitreden können, empfehlen wir Ihnen, Standardformate nach ISO 8601 zu verwenden, anstatt Ihre eigenen zu rollen. Das Standardformat ist Ihrem sehr ähnlich. Zum Beispiel :
2016-02-20T03:26:32+05:30
.Die java.time-Klassen verwenden standardmäßig diese Standardformate, sodass kein Muster angegeben werden muss. Die
ZonedDateTime
Klasse erweitert das Standardformat durch Anhängen des Namens der Zeitzone (eine sinnvolle Verbesserung).In java.sql konvertieren
Sie können von java.time zurück nach konvertieren
java.sql.Timestamp
. Extrahieren Sie eineInstant
aus demZonedDateTime
.Den alten Klassen wurden neue Methoden hinzugefügt, um die Konvertierung in / von java.time-Klassen zu erleichtern.
Ü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 java.util.Date anstelle von Timestamp verwenden:
quelle
Ein geeigneterer Ansatz besteht darin, eine Gebietsschema-Region als Parameter im Konstruktor anzugeben. Im folgenden Beispiel wird eine Region mit US-Gebietsschema verwendet. Die Datumsformatierung ist vom Gebietsschema abhängig und verwendet das Gebietsschema, um Informationen in Bezug auf die Gepflogenheiten und Konventionen der Region des Benutzers anzupassen. Gebietsschema (Java Platform SE 7)
quelle
Locale
und Zeitzone, die nichts miteinander zu tun haben.Locale
steuert die kulturellen Normen für die Formatierung und die menschliche Sprache, die für den Namen des Monats / Tages verwendet wird. Die Zeitzone stellt das Datum-Zeit - Darstellung , um einige Region angemessen zu sein Wandtaktzeit . Im Fall dieser Frage ist das Gebietsschema irrelevant, da es keine Formatierungsprobleme gibt, mit denen kulturelle Normen angewendet werden können, und es gibt keine Namen für Monat / Tag, die für eine bestimmte menschliche Sprache lokalisiert werden könnten.Sie können Folgendes verwenden
Hoffe das wird helfen. Nur mein Vorschlag und nicht für Belohnungspunkte.
quelle
Verwenden Sie moderne
java.time
Klassen, wenn Sie Java 8 oder höher verwenden.Basil Bourques Antwort ist ziemlich gut. Aber es ist zu lang. Viele Menschen hätten keine Geduld, es zu lesen. Die Top 3 Antworten sind zu alt und können Java New Bee irreführen. Deshalb biete ich diese kurze und moderne Antwort für neue Entwickler. Hoffe, diese Antwort kann die Verwendung von schrecklichen reduzieren
SimpleDateFormat
.quelle