¿Cómo formatear una marca de tiempo java.sql para mostrar?

103

¿Cómo puedo formatear una marca de tiempo java.sql a mi gusto? (a una cuerda, con fines de exhibición)

nos
fuente

Respuestas:

160

java.sql.Timestampse extiende java.util.Date. Tu puedes hacer:

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

O para incluir también el tiempo:

String s = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss").format(myTimestamp);
ChssPly76
fuente
3
Eso funcionará, pero tenga cuidado ya que SimpleDateFormat no es seguro para subprocesos.
Brian Agnew
17
Solo un pequeño recordatorio de que si el objeto SimpleDateFormat es un objeto de ámbito local (se crea y se usa solo dentro de un método), entonces es seguro para subprocesos, ya que la pila en la que residirá es inherentemente "segura para subprocesos" (ya que pertenece a un solo hilo).
Quantum
5
Para incluir el tiempo, deberá usar SimpleDateFormat ("MM / dd / aaaa hh: mm") o algo similar
AverageMarcus
1
para hacerlo completo para quienes lo necesiten, String S = new SimpleDateFormat ("MM / dd / aaaa HH: mm: ss"). format (myTimestamp);
Ishan Liyanage
27

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

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

EDITAR:
consulte la documentación de Formatter para saber qué significa TD y TT: haga clic en java.util.Formatter

La primera 'T' significa:

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

y el carácter que sigue a esa 'T':

'T'     Time formatted for the 24-hour clock as "%tH:%tM:%tS".
'D'     Date formatted as "%tm/%td/%ty". 
usuario85421
fuente
1
Esta es la mejor respuesta, según yo. No se crea ningún objeto superfluo solo para convertir la marca de tiempo en una cadena.
Salil
1
Ahora debería quedar claro dónde encontrar la documentación y lo que significa
user85421
Muy elegante. Para que quede claro, el formato producido por el ejemplo aquí se ve así 05/30/17 00:39:18.
Noumenon
@Noumenon gracias, ese era el formato "a mi gusto" como exigía la pregunta [:-)
user85421
10

Para esta pregunta en particular, la sugerencia estándar de java.text.SimpleDateFormatfunciona, pero tiene el desafortunado efecto secundario de que SimpleDateFormat no es seguro para subprocesos y puede ser la fuente de problemas particularmente desagradables, ya que corromperá su salida en escenarios de subprocesos múltiples, y usted no lo hará. ¡obtenga excepciones!

Recomiendo encarecidamente mirar a Joda para algo como esto. Por qué ? Es una biblioteca de fecha / hora mucho más rica e intuitiva para Java que la biblioteca actual (y la base de la nueva biblioteca de fecha / hora estándar de Java, por lo que aprenderá una biblioteca que pronto será estándar API).

Brian Agnew
fuente
8
Buen aviso. Pero muy fácil de abordar: no comparta instancias de SimpleDateFormat almacenándolas en el alcance de la sesión / variables de instancia / contexto estático y luego accediendo a ellas desde múltiples subprocesos. Simplemente cree un nuevo SimpleDateFormat () dentro de su método y deséchelo después de usarlo. Eso es seguro para subprocesos.
Glen Best
Por supuesto, si realmente desea almacenar / compartir la instancia de SimpleDateFormat, sincronice el acceso: sincronizado (simpleDateFormatInstance) {s = simpleDateFormatInstance.format (myTimeStamp)} O cree una extensión personalizada de la clase SDF y hágalo automáticamente dentro del método de formato.
Glen Best
9

Si está usando MySQL y desea que la base de datos en sí misma realice la conversión, use esto:

DATE_FORMAT (fecha, formato)

Si prefiere formatear usando Java, use esto:

java.text.SimpleDateFormat

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

Utilice un DateFormat. En una aplicación internacionalizada, utilice el formato proporcionado por getInstance. Si desea controlar explícitamente el formato, cree uno nuevo SimpleDateFormatusted mismo.

erickson
fuente
-9

Cadena timeFrSSHStr = timeFrSSH.toString ();

1909
fuente