Come posso convertire un timestamp da aaaa-MM-ggThh: mm: ss: formato SSSZ a MM / gg / aaaa hh: mm: ss.SSS formato? Da ISO8601 a UTC

Voglio convertire il timestamp 2011-03-10T11: 54: 30.207Z al 10/03/2011 11: 54: 30.207. Come posso fare questo? Voglio convertire il formato ISO8601 in UTC e quindi UTC deve essere localizzato. Per favore aiuto

String str_date="2011-03-10T11:54:30.207Z"; DateFormat formatter ; Date date ; formatter = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss.SSS"); date = (Date)formatter.parse(str_date); System.out.println("output: " +date ); 

Eccezione: java.text.ParseException: Data non analizzabile: “2011-03-10T11: 54: 30.207Z”

In primo luogo, devi essere consapevole del fatto che l’UTC non è un formato, è un fuso orario efficace. Quindi “convertire da ISO8601 a UTC” non ha davvero senso come concetto.

Tuttavia, ecco un programma di esempio che utilizza Joda Time che analizza il testo in un DateTime e quindi lo formatta. Ho indovinato in un formato che potresti voler usare – non hai davvero fornito abbastanza informazioni su ciò che stai cercando di fare per dire di più. Puoi anche prendere in considerazione i fusi orari … vuoi visualizzare l’ora locale nell’istante specificato? In tal caso, dovrai calcolare il fuso orario dell’utente e convertirlo in modo appropriato.

 import org.joda.time.*; import org.joda.time.format.*; public class Test { public static void main(String[] args) { String text = "2011-03-10T11:54:30.207Z"; DateTimeFormatter parser = ISODateTimeFormat.dateTime(); DateTime dt = parser.parseDateTime(text); DateTimeFormatter formatter = DateTimeFormat.mediumDateTime(); System.out.println(formatter.print(dt)); } } 

Sì. puoi usare SimpleDateFormat in questo modo.

 SimpleDateFormat formatter, FORMATTER; formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); String oldDate = "2011-03-10T11:54:30.207Z"; Date date = formatter.parse(oldDate.substring(0, 24)); FORMATTER = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss.SSS"); System.out.println("OldDate-->"+oldDate); System.out.println("NewDate-->"+FORMATTER.format(date)); 

Output OldDate -> 2011-03-10T11: 54: 30.207Z NewDate -> 10-Mar-2011 11: 54: 30.207

Inserire la data originale in un object Date e quindi stampare il risultato con un DateFormat . Potrebbe essere necessario dividere la stringa in parti più piccole per creare l’object Date iniziale, se il metodo di analisi automatica non accetta il formato.

pseudocodice:

 Date inputDate = convertYourInputIntoADateInWhateverWayYouPrefer(inputString); DateFormat outputFormat = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss.SSS"); String outputString = outputFormat.format(inputDate); 

Si consiglia di dare un’occhiata al tempo di joda , che è un po ‘più facile da usare rispetto agli strumenti di data nativi java, e fornisce molti modelli di date comuni pre-costruiti.

In risposta ai commenti, maggiori dettagli:

Per fare ciò usando il tempo di Joda, hai bisogno di due DateTimeFormatters : uno per il tuo formato di input per analizzare il tuo input e uno per il tuo formato di output per stampare il tuo output. Il tuo formato di input è un formato standard ISO, quindi la class ISODateTimeFormat di Joda time ha già un metodo statico con un parser: dateHourMinuteSecondMillis . Il tuo formato di output non è quello per cui hanno un formattatore pre-compilato, quindi dovrai crearne uno tu stesso utilizzando DateTimeFormat . Penso DateTimeFormat.forPattern("mm/dd/yyyy kk:mm:ss.SSS"); dovrebbe fare il trucco Una volta che hai i tuoi due formattatori, chiama il metodo parseDateTime() sul formato di input e il metodo di print sul formato di output per ottenere il risultato, come una stringa.

Mettendolo insieme dovrebbe assomigliare a questo (avvertimento, non testato):

 DateTimeFormatter input = ISODateTimeFormat.dateHourMinuteSecondMillis(); DateTimeFormatter output = DateTimeFormat.forPattern("mm/dd/yyyy kk:mm:ss.SSS"); String outputFormat = output.print( input.parseDate(inputFormat) ); 

Spero che questo ti aiuti:

 public String getSystemTimeInBelowFormat() { String timestamp = new SimpleDateFormat("yyyy-mm-dd 'T' HH:MM:SS.mmm-HH:SS").format(new Date()); return timestamp; } 

Usa DateFormat . (Siamo spiacenti, ma la brevità della domanda non garantisce una risposta più lunga o più dettagliata.)