Come si può formattare la stringa di data "2010-07-14 09:00:02"
per rappresentare solo "9:00"
?Data estratto dalla data Stringa
risposta
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
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.
" H: mm "non è una scelta più sana? – Joey
Anche se la stringa è * non * un oggetto' Date' inizialmente, puoi usare 'SimpleDateFormat.parse()' per trasformarlo in uno , come nell'esempio di BalusC. –
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
Utilizzando un SimpleDateFormatter
Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2010-07-14 09:00:02");
String time = new SimpleDateFormat("H:mm").format(date);
http://download.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html
Un modo molto semplice è quello di utilizzare Formatter
(vedi date time conversions) o più direttamente String.format
come in
String.format("%tR", new Date())
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);
Spiega la tua risposta per renderla più chiara per gli altri lettori. –
L'ho già aggiornato –
È 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. –
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)
per il rapido 3. –
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
.
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
È 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
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