Como formatar um timestamp java.sql para exibição?


103

Como faço para formatar um carimbo de data / hora java.sql ao meu gosto? (para uma string, para fins de exibição)

Respostas:


160

java.sql.Timestampestende java.util.Date. Você pode fazer:

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

Ou para incluir também o tempo:

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

3
Isso funcionará, mas cuidado, pois SimpleDateFormat não é seguro para threads.
Brian Agnew

17
Apenas um pequeno lembrete de que se o objeto SimpleDateFormat for um objeto com escopo local (ele é criado e usado apenas dentro de um método), então ele é seguro para threads, uma vez que a pilha na qual ele residirá é inerentemente "segura para threads" (uma vez que pertence a um único tópico).
quantum

5
Para incluir o tempo, você precisará usar SimpleDateFormat ("MM / dd / aaaa hh: mm") ou algo semelhante
AverageMarcus

1
para torná-lo completo para quem precisa, String S = new SimpleDateFormat ("MM / dd / aaaa HH: mm: ss"). format (myTimestamp);
Ishan Liyanage

27

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

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

EDITAR:
consulte a documentação do Formatter para saber o que significa TD e TT: clique em java.util.Formatter

O primeiro 'T' significa:

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

e o caractere seguindo aquele 'T':

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

1
Essa é a melhor resposta, para mim. Nenhum objeto supérfluo é criado apenas para converter o carimbo de data / hora em uma string.
Salil

1
Agora deve estar claro onde encontrar a documentação e o que ela significa
user85421

Muito elegante. Só para ficar claro, a formatação produzida pelo exemplo aqui se parece com 05/30/17 00:39:18.
Noumenon

@Noumenon obrigado, esse era o formato "ao meu gosto", conforme exigia a pergunta [:-)
user85421

10

Para esta questão em particular, a sugestão padrão java.text.SimpleDateFormatfunciona, mas tem o infeliz efeito colateral de SimpleDateFormat não ser thread-safe e pode ser a fonte de problemas particularmente desagradáveis, uma vez que corromperá sua saída em cenários multi-threaded, e você não obtenha quaisquer exceções!

Eu recomendo fortemente olhar para Joda para qualquer coisa assim. Por quê ? É uma biblioteca de data / hora muito mais rica e intuitiva para Java do que a biblioteca atual (e a base da nova biblioteca de data / hora Java padrão em ascensão, então você aprenderá um que logo se tornará padrão API).


8
Bom aviso. Mas muito fácil de resolver - não compartilhe instâncias de SimpleDateFormat armazenando-as no escopo da sessão / variáveis ​​de instância / contexto estático e, em seguida, acessando-as de vários threads. Basta criar um novo SimpleDateFormat () dentro do seu método e descartá-lo após o uso. Isso é threadsafe.
Glen Best de

Claro, se você realmente deseja armazenar / compartilhar a instância SimpleDateFormat, sincronize o acesso: synchronized (simpleDateFormatInstance) {s = simpleDateFormatInstance.format (myTimeStamp)} OU crie uma extensão personalizada da classe SDF e faça isso automaticamente dentro do método de formatação.
Glen Best de



-9

String timeFrSSHStr = timeFrSSH.toString ();

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.