Come formattare un timestamp java.sql per la visualizzazione?


103

Come formatto un Timestamp java.sql a mio piacimento? (in una stringa, per scopi di visualizzazione)

Risposte:


160

java.sql.Timestampsi estende java.util.Date. Tu puoi fare:

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

O per includere anche il tempo:

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

3
Funzionerà, ma attenzione poiché SimpleDateFormat non è thread-safe.
Brian Agnew

17
Solo un piccolo promemoria che se l'oggetto SimpleDateFormat è un oggetto con ambito locale (viene creato e utilizzato solo all'interno di un metodo), allora è thread-safe, poiché lo stack su cui risiederà è intrinsecamente "thread-safe" (poiché appartiene a un singolo thread).
quantum

5
Per includere l'ora dovrai utilizzare SimpleDateFormat ("MM / dd / yyyy hh: mm") o qualcosa di simile
AverageMarcus

1
per renderlo completo per chi ne ha bisogno, String S = new SimpleDateFormat ("MM / dd / yyyy HH: mm: ss"). format (myTimestamp);
Ishan Liyanage

27

Usa String.format (o java.util.Formatter ):

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

EDIT:
consultare la documentazione di Formatter per sapere cosa significano TD e TT: fare clic su java.util.Formatter

La prima 'T' sta per:

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

e il carattere che segue quella "T":

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

1
Questa è la risposta migliore, secondo me. Nessun oggetto superfluo viene creato solo per convertire il timestamp in una stringa.
Salil

1
Ora dovrebbe essere chiaro dove trovare la documentazione e cosa significa
user85421

Molto elegante. Giusto per essere chiari, la formattazione prodotta dall'esempio qui appare come 05/30/17 00:39:18.
Noumenon

@Noumenon grazie, quello era il formato "di mio gradimento" come richiesto dalla domanda [:-)
user85421

10

Per questa particolare domanda, il suggerimento standard java.text.SimpleDateFormatfunziona, ma ha lo sfortunato effetto collaterale che SimpleDateFormat non è thread-safe e può essere fonte di problemi particolarmente fastidiosi poiché corromperà il tuo output in scenari multi-thread e non lo farai ottenere eventuali eccezioni!

Consiglio vivamente di guardare Joda per qualcosa di simile. Perché ? È una libreria di data / ora molto più ricca e intuitiva per Java rispetto alla libreria corrente (e la base della nuova libreria di data / ora Java standard emergente, quindi imparerai presto a essere standard API).


8
Buon avvertimento. Ma molto facile da indirizzare: non condividere istanze SimpleDateFormat archiviandole in ambito di sessione / variabili di istanza / contesto statico e quindi accedendovi da più thread. Crea semplicemente un nuovo SimpleDateFormat () nel tuo metodo e scartalo dopo l'uso. Questo è threadsafe.
Glen Best

Ovviamente se vuoi davvero archiviare / condividere l'istanza SimpleDateFormat, sincronizza l'accesso: synchronized (simpleDateFormatInstance) {s = simpleDateFormatInstance.format (myTimeStamp)} OPPURE crea un'estensione personalizzata della classe SDF e fallo automaticamente all'interno del metodo di formattazione.
Glen Best



-9

String timeFrSSHStr = timeFrSSH.toString ();

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.