2010-08-17 10 views

Respuesta

102

Utilice SimpleDateFormat para convertir entre una cadena de fecha y un objeto real Date. con Date como punto de partida, puede aplicar fácilmente el formato basado en varios patrones definidos en el javadoc de SimpleDateFormat (haga clic en el enlace de código azul para Javadoc).

Aquí está un ejemplo patada de salida:

String originalString = "2010-07-14 09:00:02"; 
Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(originalString); 
String newString = new SimpleDateFormat("H:mm").format(date); // 9:00 
+0

hola también es posible formatearlo en horas: min si tengo unixtimestamp como: 1279080000 ?? Intenté lo que se sugirió en publicaciones anteriores pero no me ayudó. Gracias – JJunior

+0

Puede construir un nuevo objeto 'Fecha' con marca de tiempo en milisegundos y luego simplemente formatearlo. Si realmente lo está recuperando de DB, debe usar 'ResultSet # getTimestamp()' para obtener una 'Fecha' como se contestó en [una de sus preguntas anteriores] (http://stackoverflow.com/questions/3473421/) . O mejor aún, utilice las funciones de fecha/hora incorporadas de SQL para devolver la marca de tiempo ya en el formato deseado, de modo que no haya necesidad de la costosa tarea de volver a procesar los datos de cada fila después en Java. En ese caso, solo obtenga la hora por 'ResultSet # getString()'. Use la herramienta adecuada para el trabajo – BalusC

+1

que obtengo de la base de datos. pero se necesita para generar un informe de impresión. así que pensé que podría repetir los valores y cambiarlos sobre la marcha. ya que necesito simplemente imprimirlo al final. no se puede hacer de cualquier manera starightforward :( – JJunior

3

Estoy asumiendo su primera cuerda es un objeto fecha real, por favor, corríjanme si me equivoco. De ser así, utilice el objeto SimpleDateFormat: http://download.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html. La cadena de formato "h: mm" debería ocuparse de ello.

+1

¿No sería' H' mm' una opción más sensata? – Joey

+0

Incluso si el String es * no * un objeto 'Date' inicialmente, puede usar' SimpleDateFormat.parse() 'para convertirlo en uno , según el ejemplo de BalusC. –

+1

De hecho, sin el marcador AM/PM ('a'), preferiría' H' encima de 'h' para evitar la ambigüedad entre las 9:00 (AM) y las 9:00 (PM). – BalusC

2

Si tiene fecha enteros, puede usarlos aquí:

Date date = new Date(); 
date.setYear(2010); 
date.setMonth(07); 
date.setDate(14) 
date.setHours(9); 
date.setMinutes(0); 
date.setSeconds(0); 
String time = new SimpleDateFormat("HH:mm:ss").format(date); 
+1

Por favor explique su respuesta para que quede más claro para otros lectores. –

+1

Ya lo actualicé –

+0

Puede usar 07 para agosto si por algún motivo lo desea, pero tenga en cuenta que 08 o 09 no funcionarán para septiembre u octubre. El prefijo 0 significa que el número es octal. –

0
let datestring = "2017-02-14 02:16:28" 

let formatter = DateFormatter() 
formatter.dateStyle = DateFormatter.Style.full 
formatter.timeStyle = DateFormatter.Style.full 

formatter.dateFormat = "yyyy-MM-dd hh:mm:ss" 

let date = formatter.date(from: datestring) 
let date2 = formatter.String(from: date) 
+1

para el veloz 3. –

2

Las otras respuestas fueron buenas respuestas cuando se hizo la pregunta. El tiempo avanza, Date y SimpleDateFormat se reemplazan por clases nuevas y mejores y dejan de funcionar. En 2017, utilizar las clases del paquete java.time:

String timeString = LocalDateTime.parse(dateString, DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss")) 
      .format(DateTimeFormatter.ofPattern("H:mm")); 

El resultado es el deseado, 9:00.

Cuestiones relacionadas