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)

nr
quelle

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);
ChssPly76
quelle
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". 
user85421
quelle
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).

Brian Agnew
quelle
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

Wenn Sie MySQL verwenden und möchten, dass die Datenbank selbst die Konvertierung durchführt, verwenden Sie Folgendes:

DATE_FORMAT (Datum, Format)

Wenn Sie lieber mit Java formatieren möchten, verwenden Sie Folgendes:

java.text.SimpleDateFormat

SimpleDateFormat dateFormat = new SimpleDateFormat("M/dd/yyyy");
dateFormat.format( new Date() );
DreadPirateShawn
quelle
2

Verwenden Sie a DateFormat. Verwenden Sie in einer internationalisierten Anwendung das von bereitgestellte Format getInstance. Wenn Sie das Format explizit steuern möchten, erstellen Sie selbst ein neues SimpleDateFormat.

erickson
quelle
-9

String timeFrSSHStr = timeFrSSH.toString ();

1909
quelle