2010-08-17 25 views

risposta

102

Utilizzare SimpleDateFormat per convertire tra una stringa di data e un oggetto reale Date. con un Date come punto di partenza, è possibile applicare facilmente la formattazione in base a vari modelli come definito nella javadoc dello SimpleDateFormat (fare clic sul collegamento del codice blu per Javadoc).

Ecco un esempio kickoff:

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

ciao è anche possibile formattarlo in ore: min se ho un unixtimestamp come: 1279080000 ?? Ho provato ciò che è stato suggerito nei post precedenti, ma non ha aiutato. Grazie – JJunior

+0

È possibile costruire un nuovo oggetto 'Date' con data/ora in millisecondi e quindi semplicemente formattarlo. Se lo stai effettivamente recuperando dal DB, dovresti usare 'ResultSet # getTimestamp()' per ottenere una 'Data' come risposta in [una delle tue domande precedenti] (http://stackoverflow.com/questions/3473421/) . O ancora meglio, utilizzare le funzioni di data/ora SQL incorporate per restituire il timestamp già nel formato desiderato in modo che non sia necessario per il costoso compito di remassaging dei dati di ogni riga in seguito in Java. In tal caso, prendi l'ora con 'ResultSet # getString()'. Utilizzare lo strumento giusto per il lavoro – BalusC

+1

lo ottengo dal database. ma necessario per generare un rapporto di stampa. quindi ho pensato di poter scorrere i valori e cambiarli al volo. come ho bisogno di stampare appena alla fine. incapace di farlo in qualsiasi modo starightforward :( – JJunior

3

sto assumendo la prima stringa è un oggetto data effettiva, per favore correggetemi se sbaglio. In tal caso, utilizzare l'oggetto SimpleDateFormat: http://download.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html. La stringa di formato "h: mm" dovrebbe occuparsene.

+1

" H: mm "non è una scelta più sana? – Joey

+0

Anche se la stringa è * non * un oggetto' Date' inizialmente, puoi usare 'SimpleDateFormat.parse()' per trasformarlo in uno , come nell'esempio di BalusC. –

+1

In effetti, senza il marcatore AM/PM ('a'), preferiresti piuttosto' H' sopra 'h' per evitare ambiguità tra 9:00 (AM) e 9:00 (PM). – BalusC

2

Se hai data interi, è possibile utilizzare come qui:

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

Spiega la tua risposta per renderla più chiara per gli altri lettori. –

+1

L'ho già aggiornato –

+0

È possibile utilizzare 07 per agosto se per qualche motivo lo desideri, ma sappi che 08 o 09 non funzionerà per settembre o ottobre. Il prefisso 0 significa che il numero è ottale. –

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

per il rapido 3. –

2

Le altre risposte sono state buone risposte quando la domanda è stato chiesto. Il tempo passa, Date e SimpleDateFormat vengono sostituiti da classi nuove e migliori e non funzionano più. Nel 2017, utilizzare le classi nel pacchetto java.time:

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

Il risultato è desiderato, 9:00.