Wie formatiere ich einen java.sql-Zeitstempel für die Anzeige?


103

Wie formatiere ich einen java.sql-Zeitstempel nach meinen Wünschen? (zu einer Zeichenfolge, zu Anzeigezwecken)

Antworten:


160

java.sql.Timestamperstreckt sich java.util.Date. Du kannst tun:

String s = new SimpleDateFormat("MM/dd/yyyy").format(myTimestamp);

Oder um auch die Zeit einzuschließen:

String s = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss").format(myTimestamp);

3
Das wird funktionieren, aber Vorsicht, da SimpleDateFormat nicht threadsicher ist.
Brian Agnew

17
Nur eine kleine Erinnerung daran, dass das SimpleDateFormat-Objekt, wenn es sich um ein Objekt mit lokalem Gültigkeitsbereich handelt (es wird nur innerhalb einer Methode erstellt und verwendet), threadsicher ist, da der Stapel, auf dem es sich befindet, von Natur aus "threadsicher" ist (wie es ist) gehört zu einem einzigen Thread).
Quantum

5
Um die Zeit einzuschließen, müssen Sie SimpleDateFormat ("MM / TT / JJJJ HH: MM") oder ähnliches verwenden
AverageMarcus

1
Um es für diejenigen zu vervollständigen, die es benötigen, String S = new SimpleDateFormat ("MM / TT / JJJJ HH: MM: SS"). Format (myTimestamp);
Ishan Liyanage

27

Verwenden Sie String.format (oder java.util.Formatter ):

Timestamp timestamp = ...
String.format("%1$TD %1$TT", timestamp)

BEARBEITEN: In
der Dokumentation von Formatter erfahren Sie, was TD und TT bedeuten: Klicken Sie auf java.util.Formatter

Das erste 'T' steht für:

't', 'T'    date/time   Prefix for date and time conversion characters.

und das Zeichen nach 'T':

'T'     Time formatted for the 24-hour clock as "%tH:%tM:%tS".
'D'     Date formatted as "%tm/%td/%ty". 

1
Dies ist meiner Meinung nach die beste Antwort. Es wird kein überflüssiges Objekt erstellt, nur um den Zeitstempel in eine Zeichenfolge zu konvertieren.
Salil

1
Jetzt sollte klar sein, wo die Dokumentation zu finden ist und was sie bedeutet
user85421

Sehr elegant. Um es klar auszudrücken, sieht die Formatierung im Beispiel hier so aus 05/30/17 00:39:18.
Noumenon

@ Noumenon danke, das war das Format "nach meinem Geschmack", wie die Frage verlangte [:-)
user85421

10

Für diese spezielle Frage java.text.SimpleDateFormatfunktioniert der Standardvorschlag von Arbeiten, hat jedoch den unglücklichen Nebeneffekt, der SimpleDateFormat nicht threadsicher ist und die Ursache für besonders schlimme Probleme sein kann, da er Ihre Ausgabe in Multithread-Szenarien beschädigt und Sie dies nicht tun Ausnahmen bekommen!

Ich würde dringend auf der Suche empfehlen Joda für so etwas. Warum ? Es ist eine viel umfangreichere und intuitivere Zeit- / Datumsbibliothek für Java als die aktuelle Bibliothek (und die Grundlage für die aufstrebende neue Standard-Java-Datums- / Zeitbibliothek, sodass Sie eine baldige Standardbibliothek erlernen werden API).


8
Gute Warnung. Aber sehr einfach zu adressieren - geben Sie SimpleDateFormat-Instanzen nicht frei, indem Sie sie im Sitzungsbereich / Instanzvariablen / statischen Kontext speichern und dann von mehreren Threads aus auf sie zugreifen. Erstellen Sie einfach ein neues SimpleDateFormat () in Ihrer Methode und verwerfen Sie es nach der Verwendung. Das ist threadsicher.
Glen Best

Wenn Sie die SimpleDateFormat-Instanz wirklich speichern / freigeben möchten, synchronisieren Sie den Zugriff: synchronized (simpleDateFormatInstance) {s = simpleDateFormatInstance.format (myTimeStamp)} ODER erstellen Sie eine benutzerdefinierte Erweiterung der SDF-Klasse und führen Sie dies automatisch innerhalb der Formatmethode aus.
Glen Best



-9

String timeFrSSHStr = timeFrSSH.toString ();

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.