2014-07-07 10 views
5

Sto provando a convertire una data in formato stringa in UTC su un oggetto data che risulta in una conversione disattivata di un paio di minuti.Analisi errata delle stringhe di data in SimpleDateFormat

SimpleDateFormat fullDateFormater = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSS", Locale.US); 
fullDateFormater.setTimeZone(TimeZone.getTimeZone("UTC")); 

Prima di parsing della stringa data è - 2014-07-07T18:24:23.788810

dopo l'analisi di data è Tue Jul 08 00:07:31 GMT+05:30 2014

La conversione data corretta è Tue Jul 07 23:54:23 GMT+05:30 2014

C'è una differenza di circa 12-13 minuti in la conversione. Ho osservato una differenza nell'intervallo di 10 minuti nella conversione.

Qualche idea di cosa sta andando storto?

+0

qual è il tuo input Data della stringa –

risposta

12

SSSSSS analizza un numero di millisecondi, non microsecondi, come previsto.

788810 millisecondi è di 13 minuti, 8 secondi e 810 millisecondi. Quindi il tuo risultato è in realtà 2014-07-07T18: 27: 31.810.

Sì, questo è un bit davvero stupido del design dell'API. Sarebbe molto più senso per S...S a significare "frazioni di secondo" invece di "millisecondi" - ma è lontano dalla cosa peggiore pre-Java-8 data/ora API :(

I don 't think c'è un modo per analizzare i microsecondi con - la precisione delle API Java time pre-Java-8 è millisecondi comunque - quindi penso che avrai solo bisogno di tagliare le ultime tre cifre con substring e analizzarlo usando SSS alla fine della stringa di formato

Se stai usando Java 8, ti incoraggio vivamente ad abbracciare java.time, che sono sicuro che gestire questa situazione. (Non ho guardato la sua API di analisi, ma sono sicuro che andrà bene.)

+0

Grazie! Mi sono quasi ricordato di aver già affrontato questo problema in precedenza. Ho appena lasciato cadere la parte dei millisecondi. Non ancora usando Java 8. Grazie per "java.time". –

+0

Infatti l'API di analisi 'java.time' è valida e gestisce correttamente" frazioni di secondo "(da 0 a 9 cifre) anziché" millisecondi ". Lo raccomando caldamente Guarda alla classe 'DateTimeFormatter'. –

Problemi correlati