il mio formato attuale è: 08/11/2008 00:00
Ho bisogno di convertire questo output in 2008/11/08 00:00 Tuttavia, utilizzando SimpleDateFormat come ricercato non è in grado di farlo e mi dà un output completamente diverso, ecco i miei codici come segue:
SimpleDateFormat simpleDateFormat2 = new SimpleDateFormat("yyyy/MM/dd HH:mm") Date starting= simpleDateFormat2.parse(startTime); System.out.println("" + simpleDateFormat2.format(starting) + " real date " + startTime);
so che sto analizzando nella stringa giusta dato che si verifica il seguente output:
0014/05/01 00:00 real date 08/11/2008 00:00
non sono troppo sicuro di come per quanto riguarda i meccanismi rilevati 0014/05/01 00:00 anziché
2008/11/08 00:00
Non vedo l’ora di tutti i sugguestions Grazie in anticipo
La prima cosa che devi fare è analizzare il valore originale su un object Date
String startTime = "08/11/2008 00:00"; // This could be MM/dd/yyyy, you original value is ambiguous SimpleDateFormat input = new SimpleDateFormat("dd/MM/yyyy HH:mm"); Date dateValue = input.parse(startTime);
Una volta che hai fatto, puoi formattare il dateValue
qualsiasi modo tu voglia …
SimpleDateFormat output = new SimpleDateFormat("yyyy/MM/dd HH:mm"); System.out.println("" + output.format(dateValue) + " real date " + startTime);
quali uscite:
2008/11/08 00:00 real date 08/11/2008 00:00
Il motivo per cui 0014/05/01 00:00
è SimpleDateFormat
(quando si utilizza yyyy/MM/dd HH:mm
) usa 08
per l’anno, 11
per il mese e 2008
per il giorno, sta facendo una rotazione interna dei valori per correggere i valori in una data valida
È perché la stringa di data di origine che hai analizzato è in un formato diverso rispetto a SimpleDateFormatter. La tua fonte è in MM/dd/yyyy HH:mm
. Modificare la stringa in SimpleDateFormat in MM/dd/yyyy HH:mm
.
Prova a utilizzare un altro formato dopo il primo formato.
SimpleDateFormat simpleDateFormat2 = new SimpleDateFormat("MM/dd/yyyy HH:mm"); //You gotta parse it to a Date before correcting it Date parsedDate = simpleDateFormat2.parse(startTime); simpleDateFormat2 = new SimpleDateFormat("yyyy/MM/dd HH:mm") String newFormatttedDate = simpleDateFormat2.format(parsedDate);
Vorrei contribuire con la risposta moderna.
DateTimeFormatter currentFormatter = DateTimeFormatter.ofPattern("dd/MM/uuuu HH:mm"); DateTimeFormatter convertedOutputFormatter = DateTimeFormatter.ofPattern("uuuu/MM/dd HH:mm"); String startTime = "08/11/2008 00:00"; LocalDateTime starting = LocalDateTime.parse(startTime, currentFormatter); System.out.println(starting.format(convertedOutputFormatter));
Questo stampa
2008/11/08 00:00
La class SimpleDateFormat
hai provato ad usare è obsoleta e notoriamente problematica. Hai provato solo un po ‘di problemi con esso. Invece sto usando e raccomandando java.time
, la moderna API di data e ora Java.
Come altri hanno già detto, è necessario utilizzare due formattatori, uno per specificare il formato corrente e uno per specificare il formato desiderato.
Il tuo formattatore con il modello di formato yyyy/MM/dd HH:mm
interpretato l’8/08/2008 come il 2008esimo giorno dell’undicesimo mese dell’anno 8 dell’era comune. Non disturba un SimpleDateFormat
con le impostazioni predefinite che ci sono solo 30 giorni a novembre, continua semplicemente a contare nei seguenti mesi e anni, finendo in una data di cinque anni e mezzo dopo (il 2008 diviso per 365.25 è molto vicino a 5.5).
java.time
con la mia versione di Java? Se si utilizza almeno Java 6 , è ansible.
org.threeten.bp
e org.threeten.bp
. java.time
. Stai analizzando la data 08/11/2008 00:00
con il formato yyyy/MM/dd HH:mm
ma questa data non è in questo formato.