Comment formater un horodatage java.sql pour l'affichage?

103

Comment formater un horodatage java.sql à mon goût? (en une chaîne, à des fins d'affichage)

nos
la source

Réponses:

160

java.sql.Timestamps'étend java.util.Date. Tu peux faire:

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

Ou pour inclure également le temps:

String s = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss").format(myTimestamp);
ChssPly76
la source
3
Cela fonctionnera, mais méfiez-vous car SimpleDateFormat n'est pas thread-safe.
Brian Agnew
17
Juste un petit rappel que si l'objet SimpleDateFormat est un objet à portée locale (il est créé et utilisé uniquement à l'intérieur d'une méthode), alors il est thread-safe, car la pile sur laquelle il résidera est intrinsèquement "thread-safe" (car il appartient à un seul thread).
quantum le
5
Pour inclure le temps, vous devrez utiliser SimpleDateFormat ("MM / jj / aaaa hh: mm") ou quelque chose de similaire
AverageMarcus
1
pour le rendre complet pour ceux qui en ont besoin, String S = new SimpleDateFormat ("MM / dd / yyyy HH: mm: ss"). format (myTimestamp);
Ishan Liyanage
27

Utilisez String.format (ou java.util.Formatter ):

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

EDIT:
veuillez consulter la documentation de Formatter pour savoir ce que signifie TD et TT: cliquez sur java.util.Formatter

Le premier 'T' signifie:

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

et le caractère suivant ce «T»:

'T'     Time formatted for the 24-hour clock as "%tH:%tM:%tS".
'D'     Date formatted as "%tm/%td/%ty". 
user85421
la source
1
C'est la meilleure réponse, selon moi. Aucun objet superflu n'est créé uniquement pour convertir l'horodatage en chaîne.
Salil
1
Maintenant, il devrait être clair où trouver la documentation et ce qu'elle signifie
user85421
Très élégant. Pour être clair, le formatage produit par l'exemple ici ressemble à 05/30/17 00:39:18.
Noumenon
@Noumenon merci, c'était le format "à mon goût" comme l'exigeait la question [:-)
user85421
10

Pour cette question particulière, la suggestion standard de java.text.SimpleDateFormatfonctionne, mais a un effet secondaire malheureux qui SimpleDateFormat n'est pas thread-safe et peut être la source de problèmes particulièrement désagréables car elle corrompra votre sortie dans des scénarios multithreads, et vous ne le ferez pas. obtenez des exceptions!

Je recommanderais fortement de regarder Joda pour quelque chose comme ça. Pourquoi ? C'est une bibliothèque d'heure / date beaucoup plus riche et plus intuitive pour Java que la bibliothèque actuelle (et la base de la nouvelle bibliothèque de date / heure standard Java, vous apprendrez donc bientôt un standard. API).

Brian Agnew
la source
8
Bon avertissement. Mais très facile à résoudre - ne partagez pas les instances SimpleDateFormat en les stockant dans la portée de session / les variables d'instance / le contexte statique, puis en y accédant à partir de plusieurs threads. Créez simplement un nouveau SimpleDateFormat () dans votre méthode et supprimez-le après utilisation. C'est threadsafe.
Glen Best
Bien sûr, si vous voulez vraiment stocker / partager une instance SimpleDateFormat, synchronisez l'accès: synchronized (simpleDateFormatInstance) {s = simpleDateFormatInstance.format (myTimeStamp)} OU créez une extension personnalisée de la classe SDF, et faites-le automatiquement dans la méthode format.
Glen Best
9

Si vous utilisez MySQL et que vous souhaitez que la base de données elle-même effectue la conversion, utilisez ceci:

DATE_FORMAT (date, format)

Si vous préférez formater à l'aide de Java, utilisez ceci:

java.text.SimpleDateFormat

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

Utilisez un DateFormat. Dans une application internationalisée, utilisez le format fourni par getInstance. Si vous souhaitez contrôler explicitement le format, créez SimpleDateFormatvous-même un nouveau .

Erickson
la source
-9

Chaîne timeFrSSHStr = timeFrSSH.toString ();

1909
la source