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)

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);

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". 

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).


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

Chaîne timeFrSSHStr = timeFrSSH.toString ();

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.